首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

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的相关操作。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论