`
qqchinaok
  • 浏览: 217466 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JSF入门十(自定义转换器)

阅读更多

    本文参考

http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630

?

除了使用标准的转换器之外,您还可以自行定制您的转换器,您可以实现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传回给客户端。<br>
直接以一个简单的例子来作说明,假设您有一个User类:

package bruce.zhao.model;

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类:

package bruce.zhao.model;

public class GuestBean {
	private User user;

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

	public User getUser() {
		return user;
	}
}

?这个Bean上的属性直接传回或接受User类型的参数,我们来实现一个简单的转换器,为HTTP字符串与User对象进行转换:

package bruce.zhao.model;

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中完成注册:

<?xml version="1.0" encoding="UTF-8"?>
<!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>bruce.zhao.model.User</converter-id>
		<converter-class>
			bruce.zhao.model.UserConverter
	</converter-class>
	</converter>
	<managed-bean>
		<managed-bean-name>guest</managed-bean-name>
		<managed-bean-class>
			bruce.zhao.model.GuestBean
	</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
</faces-config>

?注册转换器时,需提供转换器标识(Converter ID)与转换器类,接下来要在JSF页面中使用转换器的话,就是指定所要使用的转换器标识,例如:

<%@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=GB2312"%>
<f:view>
	<html>
	<head>
	<title>自定义转换器</title>
	</head>
	<body>
	Guest名称是:
	<b> <h:outputText value="#{guest.user}"
		converter="bruce.zhao.model.User" /> </b>
	<h:form>
		<h:inputText id="userField" value="#{guest.user}"
			converter="bruce.zhao.model.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="bruce.zhao.model.User"/>
</h:inputText>

?除了向JSF注册转换器之外,还有一个方式可以不用注册,就是直接在Bean上提供一个取得转换器的方法,例如:

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}"/>

?
 
0
0
分享到:
评论

相关推荐

    清晰版--JSF入门.pdf

    ### JSF入门知识点详解 #### 一、JSF概述 **1.1 简介JSF** JavaServer Faces (JSF) 是一种基于Java的标准技术,用于构建企业级Web应用。JSF的设计目的是简化Web应用程序的开发过程,通过封装HTTP协议的复杂性,...

    JSF入门必读——JSF入门基础

    - 自定义转换器:如果标准转换器无法满足需求,开发者可以编写自定义转换器,通过@FacesConverter注解注册。 - 标准验证器:JSF提供了一系列预定义的验证器,如@Size、@Pattern等,用于检查用户输入的有效性。...

    值得看的jsf入门教程

    - JSF还支持自定义组件,以满足特定需求。 3. **Facelets和视图** - Facelets是JSF的默认视图表示技术,用于创建可重用的、XML-based的UI模板。 - 视图是由UI组件组成的,这些组件通过EL(Expression Language)...

    java JSF入门

    如果内置的转换器不能满足需求,开发者可以编写自定义转换器。自定义转换器需要实现`javax.faces.convert.Converter`接口,并通过`@FacesConverter`注解进行注册。 ### 结论 JSF 是一个强大的Web开发框架,它简化...

    《JSF入门》简体中文版.pdf

    JSF内置了标准转换器和验证器,同时允许自定义转换器和验证器来满足特定需求。错误信息处理也是JSF的一部分,可以在数据转换或验证失败时提供反馈。 5. 事件处理 JSF支持多种类型的事件,包括动作事件(Action ...

    《JSF入门 - 简体中文版》.pdf

    除了内置转换器之外,JSF还支持自定义转换器。开发者可以创建自己的转换器类,实现特定的转换逻辑,并将其注册到JSF框架中。 ##### 3.3 标准验证器 JSF同样提供了一系列标准验证器,如RequiredValidator和...

    《JSF入门》简体中文版

    ### JSF入门知识点详解 #### 一、JSF概述与入门 **1.1 JSF简介** JavaServer Faces (简称JSF) 是一种基于Java的标准技术,用于构建企业级Web应用。JSF的设计目的是简化Web应用程序的开发过程,通过封装HTTP协议的...

    JSF入门级教程

    - **自定义转换器**: 当内置转换器无法满足需求时,可以创建自定义转换器,通过实现`javax.faces.convert.Converter`接口来实现。 - **标准验证器**: JSF包含多种内置验证器,如`RequiredValidator`和`...

    JSF入门资料.pdf

    开发者也可以自定义转换器和验证器以满足特定需求。 3. **事件处理**: JSF使用事件驱动模型,允许开发者响应用户的交互。当用户操作如按钮点击发生时,JSF会触发相应的事件,开发者可以注册监听器来处理这些事件...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    1. **JSF入门教程**:JSF的基础知识讲解,涵盖了JSF的基本概念、架构和工作原理。这个部分将教你如何配置JSF环境,创建第一个JSF应用,理解JSF生命周期,以及认识JSF的核心组件如输入字段、按钮、表单等。通过这个...

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

    4. **实时事件与自定义转换器** "实时事件.htm"章节介绍了JSF如何处理用户的实时操作,如按钮点击等。"自订转换器.htm"则讲解了如何创建自定义的转换器,以便将用户输入的数据转换为应用程序可处理的格式。 5. **...

    JSF入门与提高让你快速掌握JSF技术

    9. **JSF扩展和自定义**:JSF允许开发者自定义组件、渲染器、事件处理器和转换器,以满足特定项目需求。 10. **JSF与其他技术的集成**:JSF可以很好地与EJB、CDI、JPA等Java EE技术结合使用,构建复杂的Web应用程序...

    JSF入门教程

    ### JSF入门教程知识点概述 #### 一、JSF简介 **1.1 简介JSF** JavaServer Faces (JSF) 是一种用于构建Java Web应用的标准框架,它旨在简化用户界面的开发,特别是在处理HTTP无状态特性和表单处理等方面。JSF的...

Global site tag (gtag.js) - Google Analytics