1

我正在使用pickList带有自定义转换器的 PrimeFaces'。

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是正确的但在我的选择列表中我仍然看到对象而不是返回值 fo getAsString()

我试图<f:converter converterId="costsConverter"/>picklist元素内使用。同样的问题。我还注册了转换器faces-config.xml

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

可能是什么问题呢?

4

1 回答 1

2

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

看看它是如何在这两个也使用转换器的 Q/A 中使用的

于 2017-05-31T16:48:03.047 回答