【发布时间】:2013-04-05 11:49:58
【问题描述】:
我需要<h:selectOneMenu> 的转换器。我创建了它,但我的对象仍然显示为 com.ddd.bo.Firm@9f36e691。
<h:selectOneMenu value="#{configBean.user.firm}" convert="firmConverter" required="true" label="#{bundle.config_form_add_firm}" >
<f:selectItems value="#{configBean.firmsLazyList}" />
</h:selectOneMenu>
在faces-config-general.xml,我放了:
<converter>
<converter-for-class>com.ddd.bo.Firm</converter-for-class>
<converter-class>com.ddd.bo.converter.FirmConverter</converter-class>
</converter>
在FirmConverter.java:
@FacesConverter(forClass=Firm.class)
public class FirmConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String newValue) throws ConverterException {
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Firm pFirm = (Firm) value;
return pFirm.getName();
}
}
我还尝试了@FacesConverter("firmConverter"),而不是@FacesConverter(forClass=Firm.class)。
我没有收到任何错误。
如何让转换器工作以显示Firm#getName() 而不是Firm#toString()?
【问题讨论】:
-
forClass应该可以工作。当您使用convert而不是converter时,该名称将不起作用。faces-config-general.xml到底是什么?它是否被引用为javax.faces.CONIG_FILES?此外,您真的在使用 JSP 吗?自 JSF2 以来已弃用此功能。在未来的 JSF 问题中,请使用[jsf]标签而不是[java-ee]。