JSF Gossip: 标准转换器

 

Web应用程式与浏览器之间是使用HTTP进行沟通,所有传送的资料基本上都是字串文字,而Java应用程式本身基本上则是物件,所以物件资料必须经由转换传送给浏览器,而浏览器送来的资料也必须转换为物件才能使用。

JSF定义了一系列标准的转换器(Converter),对于基本资料型态(primitive type)或是其Wrapper类别,JSF会使用javax.faces.Boolean、javax.faces.Byte、 javax.faces.Character、javax.faces.Double、javax.faces.Float、 javax.faces.Integer、javax.faces.Long、javax.faces.Short等自动进行转换,对于 BigDecimal、BigInteger,则会使用javax.faces.BigDecimal、javax.faces.BigInteger自动进行转换。

至于DateTime、Number,我们可以使用<f:convertDateTime>、<f: convertNumber>标签进行转换,它们各自提供有一些简单的属性,可以让我们在转换时指定一些转换的格式细节。

来看个简单的例子,首先我们定义一个简单的Bean:

  • UserBean.java
package onlyfun.caterpillar;

import java.util.Date;

public class UserBean {
private Date date = new Date();

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}
}


这个Bean的属性接受Date型态的参数,按理来说,接收到HTTP传来的资料中若有相关的日期资讯,我们必须剖析这个资讯,再转换为Date物件,然而我们可以使用JSF的标准转换器来协助这项工作,例如:

  • index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=Big5"%>

<f:view>

<html>
<head>
<title>转换器示范</title>
</head>
<body>

设定的日期是:
<b>
<h:outputText value="#{user.date}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:outputText>
</b>

<h:form>
<h:inputText id="dateField" value="#{user.date}">
<f:convertDateTime pattern="dd/MM/yyyy"/>
</h:inputText>
<h:message for="dateField" style="color:red"/>
<br>
<h:commandButton value="送出" action="show"/>
</h:form>
</body>
</html>

</f:view>

在<f:convertDateTime>中,我们使用pattern指定日期的样式为dd/MM/yyyy,即“日/月/西元”格式,如果转换错误,则<h:message>可以显示错误讯息,for属性参考至<h:inputText> 的id属性,表示将有关dateField的错误讯息显示出来。


假设faces-config.xml是这样定义的:

  • faces-config.xml
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

<faces-config>
<navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>show</from-outcome>
<to-view-id>/pages/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>

<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
onlyfun.caterpillar.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>


首次连上页面时显示的画面如下:


如您所看到的,转换器自动依pattern设定的样式将Date物件格式化了,当您依格式输入资料并送出后,转换器也会自动将您输入的资料转换为Date 物件,如果转换时发生错误,则会出现以下的讯息:


<f:convertDateTime>标签还有几个可用的属性,您可以参考 Tag Library Documentation   的说明,而依照类似的方式,您也可以使用<f:convertNumber>来转换数值。

你可能感兴趣的:(JSF Gossip: 标准转换器)