博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSF---->自订转换器
阅读量:5865 次
发布时间:2019-06-19

本文共 3183 字,大约阅读时间需要 10 分钟。

除了使用标准的转换器之外,您还可以自行定制您的转换器,您可以实作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

package wsz.ncepu;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

package wsz.ncepu;public class GuestBean {	private User user;	public void setUser(User user) {		this.user = user;	}	public User getUser() {		return user;	}}

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

UserConverter.java

package wsz.ncepu;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;	}}

注册转换器时,需提供转换器识别(Converter ID)与转换器类别,

/*
show
/pages/index.jsp
userConverter
wsz.ncepu.UserConverter
guest
wsz.ncepu.GuestBean
session

接下来要在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=utf-8"%>
自订转换器 Guest名称是:

也可以<f:converter>卷标并使用converterId属性来指定转换器

结果如下:

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

package wsz.ncepu; 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}"/>

 

 

转载地址:http://yiynx.baihongyu.com/

你可能感兴趣的文章
nginx日志配置指令详解
查看>>
jpeg和gif已经影响互联网发展进程了,他们应该被历史淘汰了!!!
查看>>
高可用集群heartbeat全攻略
查看>>
浅谈触发器使用
查看>>
机器学习简史brief history of machine learning
查看>>
golang笔记——array
查看>>
JAVA编程思想(2) - 操作符(二)
查看>>
mysql安装前的系统准备工作(转)
查看>>
Zabbix监控
查看>>
[android] 手机卫士手势滑动切换屏幕
查看>>
memcached搭建缓存系统
查看>>
转 数据库中的 date datetime timestamp的区别
查看>>
C++中const简介及用法
查看>>
Linux:Ubuntu14.04离线安装scala(在线安装)
查看>>
SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法
查看>>
LeetCode - 120. Triangle
查看>>
Makefile使用总结【转】
查看>>
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
查看>>
TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge
查看>>
MySQL存储引擎MyISAM与InnoDB的优劣
查看>>