gpt4 book ai didi

jsf-2 - 带有 (ENUM) 转换器的复合组件和 SelectOneMenu

转载 作者:行者123 更新时间:2023-12-02 07:38:12 24 4
gpt4 key购买 nike

我正在尝试使用 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>

所以,问题是当我试图通过转换器时!这是一个 ENUM 转换器(使用 @FacesConverter(value = "tipoCampoConverter") 注释扩展 EnumConverter)

错误是:javax.el.E​​LException: 无法将类 java.lang.String 的 tipoCampoConverter 转换为接口(interface) javax.faces.convert.Converter

**编辑:

一些额外的信息:

我尝试在有和没有“类型”的情况下声明属性:

    <cc:attribute name="converter" required="true" type="javax.faces.convert.Converter"/>

更多信息:信息:启动 Servlet 引擎:Apache Tomcat/7.0.12信息:正在初始化 Mojarra 2.1.10信息:在 PrimeFaces 3.4.2 上运行信息:在 PrimeFaces Extensions 0.6.1 上运行

:)

最佳答案

converter属性默认需要一个 Converter值为 ValueExpression 时的实例.像这样的 <h:inputText converter="#{bean.converter}"> .不幸的是,复合 Material 中的这种不直观行为是“设计使然”的。

你最好的选择是使用 <f:converter>相反。

<p:selectOneMenu ...>
...
<f:converter converterId="#{cc.attrs.converter}" />
</p:selectOneMenu>

具体问题无关,您根本不需要为此特定用例使用转换器。 JSF 已经有一个内置的枚举转换器。只有在绑定(bind) UISelectMany 时才需要此转换器List<E> 的组成部分而不是 E[] .

另见:

关于jsf-2 - 带有 (ENUM) 转换器的复合组件和 SelectOneMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com