12.1.3 一个没有类型转换的视图
在我们考虑更好的处理类型转换的方式前,来看看转换处理的另外一个方面。你已经看到你很需要转换字符串到各种数据类型,但是对转换其他数据类型到字符串有何想法?当你希望显示一个网页时需要做这项工作,因为HTML是100%的文本。在例程12-3中,你可以看到没有类型转换时JSP看起来大概是什么样子。
例程12-3 一个没有使用类型转换的显示成功结果的JSP页面
<%@ taglib uri="webwork" prefix="ww" %>
<%@ page import="com.opensymphony.xwork.ActionContext,
java.util.Date,
java.text.DateFormat"%>
<html>
<head>
<title>New User Created</title>
</head>
<body>
A new user was created!
<p/>
Username: <ww:property value="user.username"/><br/>
Password: [Not shown]<br/>
First name: <ww:property value="user.firstName"/><br/>
Last name: <ww:property value="user.lastName"/><br/>
Age: <ww:property value="user.age"/><br/>
Email: <ww:property value="user.email"/><br/>
<%
Date birthDate = (Date)
ActionContext.getContext().getValueStack().
findValue("user.birthDate");
DateFormat df =
DateFormat.getDateInstance(DateFormat.SHORT);
%>
Birth Date: <%= df.format(birthDate) %><br/>
</body>
</html>
要注意的第一件事情就是你可以在JSP里面使用纵向表示法,因为User对象已经被创建,还可以通过复合表达式访问(正如第8章中“利用表达式语言获取数据”中说的那样)。
开始的3个字段:username、firstName和lastName,可以不必关心,因为它们已经是正确的格式了。
下一个字段age,虽然有点儿复杂但也不是问题。这个输出是正确的,因为转换一个整数到字符串的过程很简单而且是自动处理的。
更棘手的情况出现在你想打印出邮件地址的时候。“user.email”这个表达式返回一个Email对象,它必须被转换为一个字符串。WebWork首先试图找到类型转换器来完成这个工作,但是如果它没有找到,它就会使用对象的toString()方法。在这里,我们假设Email类的toString()方法已经被恰当地实现,完成了它该做的事情。
最后一个字段birthDate是最难处理的。Date的toString()方法输出的不是你期望的格式,所以打印出这个字段需要更多的代码。当你初次输入生日时,是使用SHORT格式来输入的(在美国,格式为MM/dd/yyyy)。然而,Date的toString方法总是试图返回LONG格式的日期。这会令Web应用程序的用户迷惑,特别是由于另外的原因他们需要重新输入已经被标明无效的数据时。你能想象得到,当你输入02/12/1982,却返回了February 12,1982 00:00:00 PST,这是多么令人恼火!
例程12-3中的代码使用WebWork的内部API得到原始的Date对象。它创建了一个日期格式化对象,指定了SHORT格式,然后可以用这个对象使日期格式化为你需要的格式。这实际上是逆向处理了例程12-2中CreateUser action的相关操作。







