Jsf 将值放入EL中的viewScope映射而不显式转换是否始终转换为java.lang.String?
Jsf 将值放入EL中的viewScope映射而不显式转换是否始终转换为java.lang.String?,jsf,el,Jsf,El,f:selectItem中的值是一个整数(Const.DB\u NEW\u DATASET),但是testlistener的输出总是java.lang.String。这不是我所期望的 xhtml 豆子 @Named @视域 公共类MyBean实现了可序列化{ @注入 @视图地图 私有地图视图地图; 公共void testlistener(){ System.out.println(viewMap.get('foo').getClass()); } } 公共类常量{ 公共静态最终整数DB_NE
f:selectItem
中的值是一个整数(Const.DB\u NEW\u DATASET
),但是testlistener
的输出总是java.lang.String
。这不是我所期望的
xhtml
豆子
@Named
@视域
公共类MyBean实现了可序列化{
@注入
@视图地图
私有地图视图地图;
公共void testlistener(){
System.out.println(viewMap.get('foo').getClass());
}
}
公共类常量{
公共静态最终整数DB_NEW_DATASET=-1;
}
Mojarra 2.3.9.SP01实际上根本不是“转换为java.lang.String
”。它只是JSF未转换的默认类型
这是因为of{viewScope.foo}
返回java.lang.Object
,因此JSF不会对任何注册的@FacesConverter(forClass)
执行任何自动转换
您需要显式指定内置转换器,它本质上是一个@facescoverter(forClass=java.lang.Integer)
如果将例如{bean.foo}
与私有整数foo
一起使用,这是不必要的,因为这样ValueExpression#getType()
将返回java.lang.Integer
,因此JSF可以找到内置转换器
另见:
java.lang.String
”。它只是JSF未转换的默认类型
这是因为of{viewScope.foo}
返回java.lang.Object
,因此JSF不会对任何注册的@FacesConverter(forClass)
执行任何自动转换
您需要显式指定内置转换器,它本质上是一个@facescoverter(forClass=java.lang.Integer)
如果将例如{bean.foo}
与私有整数foo
一起使用,这是不必要的,因为这样ValueExpression#getType()
将返回java.lang.Integer
,因此JSF可以找到内置转换器
另见:
<f:metadata>
<f:importConstants type="foo.bar.Const" />
</f:metadata>
<h:selectOneListbox value="#{viewScope.foo}">
<f:selectItem
itemValue="#{Const.DB_NEW_DATASET}"
itemLabel="foo" />
<f:selectItem
itemValue="#{Const.DB_NEW_DATASET}"
itemLabel="bar" />
<f:ajax listener="#{myBean.testlistener}" />
</h:selectOneListbox>
@Named
@ViewScoped
public class MyBean implements Serializable {
@Inject
@ViewMap
private Map<String, Object> viewMap;
public void testlistener() {
System.out.println(viewMap.get('foo').getClass());
}
}
public class Const {
public static final Integer DB_NEW_DATASET = -1;
}
<h:selectOneListbox ... converterId="javax.faces.Integer">