自定义转换器转换的值未显示

时间:2017-05-31 11:19:49

标签: jsf primefaces converter picklist

我正在使用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()

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

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

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

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

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