请教JSF2.0中自定义Converter的配置
工程用的是sun的JSF2.0包,自定义了一个Converter,
在*.jsp文件中用<%@ taglib uri="http://java.sun.com/jsf/composite/tld" prefix="conv" %>这种方式引入tld,页面处理没有问题。
但是在*.xhtml文件中用xmlns:conv="http://java.sun.com/jsf/composite/tld"引入tld,页面不会报错,但是控件没有调用convertor的代码。
在浏览器里看*.xhtml文件的源代码:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:conv="http://java.sun.com/jsf/composite/tld">
感觉红色部分没有解析,正常应该是这样:<html xmlns="http://www.w3.org/1999/xhtml">
tld放在web-inf/lib目录下,faces-config.xml里面配了一个<converter/>
有做过类似的兄弟帮忙说说怎么配的?
自己搞定了。
1、要在faces-config.xml中定义一个<converter/>:这里在JSF1.2中也是这么写的,这里一定要定义,要不报错。
<converter>
<converter-id>myconv</converter-id>
//<converter-class/>:转换器的类名
<converter-class>component.convertor.MyConv</converter-class>
</converter>
2、定义一个converter.taglib.xml,facelets的写法,头尾抄jsf2.0的jar包的写法,类似JSF1.2中的TAG定义
<facelet-taglib...>
<tag>
<tag-name>myconv</tag-name>
<converter>
<converter-id>myconv</converter-id>
//<handler-class/>:handler的类名
<handler-class>component.convertor.MyConvHandler</handler-class>
</converter>
<attribute>
<name>digit</name>
<type>java.lang.String</type>
</attribute>
</tag>
</facelet-taglib>
3、MyConvHandler.java,功能类似JSF1.2里的TAG类,
public class MyConvHandler extends ConverterHandler
{
...
}
4、MyConv.java ,转换器的源代码,和JSF1.2中一样写
public class MyConv implements Converter, PartialStateHolder
{
public static final String CONVERTER_ID = "myconv";
...
}
5、faces-config.xml和converter.taglib.xml和MyConv.java 中的converter_id必须一致
下载JSF2.0的源代码,看看具体的写法。