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>

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

错误是:javax.el.E​​LException:无法将类型为 java.lang.String 的类型的tipoCampoConverter 转换为接口 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 扩展 0.6.1 上运行

:)

4

1 回答 1

7

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

你最好的选择是使用它<f:converter>

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

与具体问题无关,您根本不需要针对此特定用例的转换器。JSF 已经有一个内置的枚举转换器。如果您将UISelectMany组件绑定到 aList<E>而不是E[].

也可以看看:

于 2012-12-22T17:45:47.520 回答