Mar*_*nha 2 primefaces composite-component jsf-2
我正在尝试使用selectOneMenu创建一个简单的复合组件......这非常简单:
<cc:implementation>
<h:panelGrid columns="2">
<p:outputLabel for="#{cc.attrs.fieldId}" value="#{cc.attrs.fieldLabel}"/>
<p:selectOneMenu id="#{cc.attrs.fieldId}" required="#{cc.attrs.required}" converter="#{cc.attrs.converter}" value="#{cc.attrs.targetValue}">
<f:selectItem itemLabel="#{msg['label.selecione.item']}" itemValue="" />
<f:selectItems value="#{cc.attrs.listValue}"/>
</p:selectOneMenu>
</h:panelGrid>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
所以,问题是我试图通过转换器!这是一个ENUM转换器(使用@FacesConverter(value ="tipoCampoConverter")注释扩展EnumConverter)
错误是:javax.el.ELException:无法将类型为java.lang.String的tipoCampoConverter转换为接口javax.faces.convert.Converter
**编辑:
一些额外的信息:
我尝试使用和不使用'type'声明属性:
<cc:attribute name="converter" required="true" type="javax.faces.convert.Converter"/>
Run Code Online (Sandbox Code Playgroud)
更多信息:INFO:启动Servlet引擎:Apache Tomcat/7.0.12 INFO:初始化Mojarra 2.1.10 INFO:在PrimeFaces上运行3.4.2 INFO:在PrimeFaces Extensions上运行0.6.1
:)
converter
默认情况下,该属性Converter
值为a时的实例ValueExpression
.像这样的东西<h:inputText converter="#{bean.converter}">
.不幸的是,这种在复合材料中不直观的行为"按设计".
你最好的选择是使用<f:converter>
.
<p:selectOneMenu ...>
...
<f:converter converterId="#{cc.attrs.converter}" />
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
无关的具体问题,你就不会需要一个转换器,这个特定用例的.JSF已经有一个内置的枚举转换器.如果要将UISelectMany
组件绑定到a List<E>
而不是,则只需要此转换器E[]
.
GenericEnumConverter
-一个可重复使用的解决方案UISelectMany
与List<E>
归档时间: |
|
查看次数: |
4828 次 |
最近记录: |