我正在使用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>
可能是什么问题?
答案 0 :(得分:2)
您对选项列表,selectonemenus等组件中的值有错误的理解。这些值永远不会显示在那里,但标签是。而且由于转换器是用于值而不是标签,因此您永远不会看到转换后的值,但标签和所有内容都应该按原样运行。只需使用itemLabel="#{cost.no}"
,一切都应该没问题(显示明智)。
参见例如如何在这两个使用转换器的Q / A中使用