JavaServer Faces提供了一组转换器。你可以使用它来转换组件数据。转换的目的是从Servlet API中获取基于String的数据, 并将其转换为强类型的Java对象。
javax.faces.convert包包含所有标准转换器。转换器是根据组件值所指向的EL表达式的类型隐式分配的。你还可以通过转换器ID访问这些转换器。下表显示了转换器类及其关联的转换器ID。
JSF转换器
类 | 转换器ID |
---|---|
BigDecimalConverter | javax.faces.BigDecimal |
BigIntegerConverter | javax.faces.BigInteger |
BooleanConverter | javax.faces.Boolean |
ByteConverter | javax.faces.Byte |
CharacterConverter | javax.faces.Character |
DateTimeConverter | javax.faces.Datetime |
DoubleConverter | javax.faces.Double |
EnumConverter | javax.faces.Enum |
FloatConverter | javax.faces.Float |
IntegerConverter | javax.faces.Integer |
LongConverter | javax.faces.Long |
NumberConverter | javax.faces.Number |
ShortConverter | javax.faces.Short |
标准错误消息与每个转换器关联。如果你在页面上的组件上使用任何转换器, 但转换器无法转换该组件的值, 则转换器的错误消息将显示在页面上。
标准转换器DateTimeConverter和NumberConverter都有自己的标签, 使用它们可以使用标签属性配置组件数据的格式。
JSF数据转换核心标签
标签 | 功能 |
---|---|
f:converter | 用于将任意转换器添加到父组件。 |
f:convertDateTime | 它用于将DateTimeConverter实例添加到父组件。 |
f:convertNumber | 它用于将NumberConverter实例添加到父组件。 |
JSF <f:converter>标记示例
// index.xhtml
<h:form>
<h:outputLabel for="username">User Name</h:outputLabel>
<h:inputText id="user-id" value="#{user.name}"/><br/>
<h:outputLabel for="age">Enter Age</h:outputLabel>
<h:inputText id="age-id" value="#{user.age}">
<f:converter converterId="javax.faces.Integer" />
</h:inputText><br/>
<h:commandButton action="response.xhtml" value="Submit"/>
</h:form>
// User.java
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class User {
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
// response.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
<h:head>
<title>Response Page</title>
</h:head>
<h:body>
<h1>
<h:outputText value="Hello #{user.name}"/>
</h1>
<h3><h:outputLabel value="You are #{user.age} years old."></h:outputLabel></h3>
</h:body>
</html>
输出:
//索引页
//回应页面
评论前必须登录!
注册