【问题标题】:Values converted by custom converter not displayed自定义转换器转换的值不显示
【发布时间】:2017-05-31 11:19:49
【问题描述】:

我正在使用 PrimeFaces 的 pickList 和自定义转换器。

JSF:

<p:pickList converter="costsConverter" value="#{offerController.costsAsDualListModel}" var="cost" itemLabel="#{cost}" itemValue="#{cost}" />

offerController.costsAsDualListModel 看起来像这样:

public DualListModel<Cost> getCostsAsDualListModel() {
    DualListModel<Cost> costsDualList;
    List<Cost> costsSource = new ArrayList<Cost>();
    List<Cost> costsTarget = new ArrayList<Cost>();
    for (Cost c : costs) {
        costsSource.add(c);
    }
    costsDualList = new DualListModel<Cost>(costsSource, costsTarget);
    return costsDualList;
}

我的自定义转换器如下所示:

public String getAsString(FacesContext context, UIComponent component, Object object) {
    if (object == null) {
        return "";
    }
    Integer no = ((Cost) object).getNo();
    String valueOf = String.valueOf(no);
    return valueOf;
}

getAsString() 被调用,valueOf 是正确的,但在我的选择列表中,我仍然看到对象,而不是 getAsString() 的返回值。

我尝试在picklist 元素中使用&lt;f:converter converterId="costsConverter"/&gt;。同样的问题。我还在faces-config.xml注册了转换器:

<converter>
  <converter-id>costsConverter</converter-id>
  <converter-class>com.my.converter.CostsConverter</converter-class>
</converter>

可能是什么问题?

【问题讨论】:

  • 您必须使用带有converter 属性的converterID。这是 jsf 应用配置文件(faces-config.xml)或@FacesConverter 注解中&lt;converter&gt;&lt;converter-id&gt; 的值。
  • 对于标签,不需要转换器(甚至不使用)。只需在此处使用 `#{cost.no}...

标签: jsf primefaces converter picklist


【解决方案1】:

您对选项列表、选择菜单等组件中的值有错误的理解。这些值永远不会显示在那里,但标签会显示。而且由于转换器用于值,而不是标签,因此您永远不会看到转换后的值,但标签和所有内容都按应有的方式运行。只需使用itemLabel="#{cost.no}" 就可以了(显示方面)。

参见例如如何在这两个也使用转换器的 Q/A 中使用它

【讨论】:

  • 非常感谢您的回答!这是我在selectonemenu 中使用它的方式,但picklist 的值使用DualListModel&lt;&gt; 与源和目标(它们都是Lists&lt;&gt; 元素)而不是List&lt;&gt;。所以我不知道如何访问no
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 2016-04-19
  • 2012-03-15
  • 2021-01-28
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多