【发布时间】: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 元素中使用<f:converter converterId="costsConverter"/>。同样的问题。我还在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注解中<converter><converter-id>的值。 -
对于标签,不需要转换器(甚至不使用)。只需在此处使用 `#{cost.no}...
标签: jsf primefaces converter picklist