`
yingfang05
  • 浏览: 122985 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

JSF里自订转换器

    博客分类:
  • jsf
阅读更多
除了使用标准的转换器之外,您还可以自行定制您的转换器,您可以实作javax.faces.convert.Converter接口,这个接口有两个要实作的方法:
public Object getAsObject(FacesContext context,
                           UIComponent component,
                           String str);
public String getAsString(FacesContext context,
                           UIComponent component,
                           Object obj);
  简单的说,第一个方法会接收从客户端经由HTTP传来的字符串数据,您在第一个方法中将之转换为您的自订对象,这个自订对象将会自动设定给您指定的Bean对象;第二个方法就是将从您的Bean对象得到的对象转换为字符串,如此才能藉由HTTP传回给客户端。

  直接以一个简单的例子来作说明,假设您有一个User类别:

User.java
User.java
package onlyfun.caterpillar;

public class User {
    private String firstName;
    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
  这个User类别是我们转换器的目标对象,而您有一个GuestBean类别:

GuestBean.java
GuestBean.java
package onlyfun.caterpillar;

public class GuestBean {
    private User user;

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }
}
  这个Bean上的属性直接传回或接受User型态的参数,我们来实作一个简单的转换器,为HTTP字符串与User对象进行转换:

UserConverter.java
UserConverter.java
package onlyfun.caterpillar;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;

public class UserConverter implements Converter {
    public Object getAsObject(FacesContext context,
                              UIComponent component,
                              String str)
                                 throws ConverterException {
        String[] strs = str.split(",");

        User user = new User();

        try {
            user.setFirstName(strs[0]);
            user.setLastName(strs[1]);
        }
        catch(Exception e) {
            // 转换错误,简单的丢出例外
            throw new ConverterException();
        }

        return user;
    }

    public String getAsString(FacesContext context,
                              UIComponent component,
                              Object obj)
                                 throws ConverterException {
        String firstName = ((User) obj).getFirstName();
        String lastName = ((User) obj).getLastName();

        return firstName + "," + lastName;
    }
}
  实作完成这个转换器,我们要告诉JSF这件事,这是在faces-config.xml中完成注册:

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>

    <converter>
        <converter-id>onlyfun.caterpillar.User</converter-id>
        <converter-class>
            onlyfun.caterpillar.UserConverter
        </converter-class>
    </converter>

    <managed-bean>
        <managed-bean-name>guest</managed-bean-name>
        <managed-bean-class>
            onlyfun.caterpillar.GuestBean
        </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
</faces-config>
  注册转换器时,需提供转换器识别(Converter ID)与转换器类别,接下来要在JSF页面中使用转换器的话,就是指定所要使用的转换器识别,例如:

index.jsp
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>

Guest名称是:<b>
           <h:outputText value="#{guest.user}"
                   converter="onlyfun.caterpillar.User"/>
           </b>

    <h:form>
        <h:inputText id="userField"
                     value="#{guest.user}"
                     converter="onlyfun.caterpillar.User"/>
        <h:message for="userField" style="color:red"/>
        <br>
        <h:commandButton value="送出" action="show"/>
    </h:form>
</body>
</html>

</f:view>
  您也可以<f:converter>卷标并使用converterId属性来指定转换器,例如:

<h:inputText id="userField" value="#{guest.user}">
     <f:converter converterId="onlyfun.caterpillar.User"/>
</h:inputText>
  除了向JSF注册转换器之外,还有一个方式可以不用注册,就是直接在Bean上提供一个取得转换器的方法,例如:

GuestBean.java
GuestBean.java
package onlyfun.caterpillar;

import javax.faces.convert.Converter;

public class GuestBean {
    private User user;
    private Converter converter = new UserConverter();

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }

    public Converter getConverter() {
        return converter;
    }
}
  之后可以直接结合 JSF Expression Language 来指定转换器:

<h:inputText id="userField"
     value="#{guest.user}"
     converter="#{guest.converter}"/>
分享到:
评论

相关推荐

    JSF基础教程 简体中文

    o 自订转换器 o 标准验证器 o 自订验证器 o 错误讯息处理 o 自订转换, 验证标签 事件处理 JSF的事件模型提供一个近似的桌面GUI事件模式,让熟悉GUI设计的人员也能快速上手Web程序设计。 o 动作事件 o 实时事件 o 值...

    JSF入门级教程

    * 自订转换器:JSF框架提供了一个自订转换器机制,允许开发者在JSF页面中使用自订转换器。 * 标准验证器:JSF框架提供了一个标准验证器机制,允许开发者在JSF页面中使用标准验证器。 JSF入门级教程提供了一个详细的...

    《JSF入门》简体中文版修正版(含页面间导航)

    "自订转换器.htm"则讲解了如何创建自定义的转换器,以便将用户输入的数据转换为应用程序可处理的格式。 5. **自定义Renderer** "自订 Renderer.htm"涵盖了如何扩展JSF的渲染机制,以满足特定的输出需求。Renderer...

    JSF从零进阶

    - **验证器和转换器**:验证器用于确保用户输入的数据符合预期格式或规则,而转换器则是将用户输入的数据转换为适当的类型。通过具体示例展示了这两种组件的应用场景。 - **国际化**:为了支持多种语言和地区,JSF...

    JSF入门精通超级好的教程

    - **自订转换器**:指导如何编写自定义的转换器以满足特定需求。 - **标准验证器**:提供内置的验证器列表,用于检查用户输入的有效性。 - **自订验证器**:教授如何创建自定义验证器以执行特定的验证逻辑。 - *...

    JSF入门教材简体中文版(html版 pdf版)

    遗憾的是,描述中提到PDF版缺少了"自订元件"一章,这意味着你将无法从该版本中学习到有关自定义JSF组件的详细信息。不过,HTML版完整,你可以通过它来弥补这部分的缺失。 总之,JSF入门教材是初学者了解和掌握JSF...

    JSF实例学习--比萨(pizza)订购系统

    你可以通过注解或XML配置文件定义自定义的转换器和验证器,例如确保用户输入的比萨数量是正整数,或者比萨类型存在于预定义的列表中。 此外,JSF支持**导航规则**,定义了在用户操作后如何跳转到下一个页面。在比萨...

    良葛格JSF学习笔记.pdf

    - **转换器**:用于在模型数据类型和视图组件数据类型之间进行转换,例如将字符串转换为日期或数值。 - **验证器**:确保输入的数据符合特定的格式或规则,如邮箱格式验证、必填字段检查等。 **2.4 事件处理** - *...

    java server face 教程

    **自订转换器** - **自定义扩展**:讲解如何根据特定需求自定义转换器,以满足非标准的数据转换需求。 - **开发指南**:提供自定义转换器的开发指南和示例代码。 **标准验证器** - **内置验证**:介绍JSF提供的...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    jboss seam 教程

    - **JSF配置文件**:`faces-config.xml`定义了JSF视图的配置信息,包括转换器、验证器等。 - **EJB部署描述符**:`ejb-jar.xml`配置了EJB模块的信息,如事务管理、安全性等。 - **持久化部署描述符**:`persistence....

    jboss seam 2.01GA REF DOC

    - **转换器**:Seam 支持自定义转换器,用于在视图和模型之间转换数据。 #### 第二部分:点击列表示例 本节通过一个消息管理示例介绍了如何在 Seam 中实现点击列表功能。 **1.3.1 理解代码** - **1.3.1.1 实体类...

    基于jsp的酒店管理系统源码数据库.zip

    7. **Servlet过滤器和监听器**:过滤器用于拦截请求和响应,可以进行权限控制、字符编码转换等操作;监听器则可以监听Web应用中的各种事件,如会话创建、销毁等,进行相应的处理。 8. **Spring框架**:虽然未明确...

    开源框架 Spring Gossip

    以 Tiles 为例 自订 View Class 与其它 Web 框架的整合 您可以将 Spring 与现在的一些 Web 框架结合在一起,重点都在于如何让 Web 框架意识到 Spring 的存在。 第一个 Struts 程式 在 Struts...

    jsp酒店管理系统

    2. **Web开发框架**:这个管理系统可能使用了某种Web开发框架,如Struts、Spring MVC或JSF等,这些框架能简化MVC(Model-View-Controller)模式的实现,提高开发效率和代码组织性。 3. **数据库管理**:酒店管理...

Global site tag (gtag.js) - Google Analytics