【发布时间】:2015-07-10 19:48:59
【问题描述】:
我有一个 jsf 2 选择输入,带有一个与选择条目绑定的转换器。我的对象有一个很长的 id 字段,应该是值。当我的转换器被调用时,它会使用整个选择项列表 (List<SimpleEntityGroup>) 而不是 SimpleEntityGroup 调用,因此我可以返回组的 .getId()。
调试输出为:
转换成字符串
[SimpleEntityGroup [id=1, name=Group 1], SimpleEntityGroup [id=2, name=Group 2], SimpleEntityGroup [id=3, name=Group 3]]
我希望每次使用一个 SimpleEntityGroup 调用该方法 3 次,而不是一次将所有 3 个作为列表。该方法应该返回一个字符串,如果我返回“1”,那么我在选择中的所有值都是一个,所以我知道它在正确的位置使用转换器。为什么会这样称呼它?
<h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="SimpleEntityGroupConverter">
<f:selectItems value="#{simpleEntityBacking.groups}" var="c"
itemLabel="#{c.name}" itemValue="#{c.id}" />
</h:selectOneMenu>
这是我的支持 bean - getter 和 setter,全部省略:
public class SimpleEntityBacking {
private static final Logger L = Logger.getLogger(SimpleEntityBacking.class);
@ManagedProperty(value="#{simpleEntity}")
private SimpleEntity simpleEntity;
@ManagedProperty(value="#{groups}")
private List<SimpleEntityGroup> groups;
@EJB
private SimpleEntityDao ed;
/**
*
*/
public SimpleEntityBacking() {
}
这是我的转换器:
/* (non-Javadoc)
* @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.String)
*/
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
return ed.getGroupById(new Long(arg2));
}
/* (non-Javadoc)
* @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
*/
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
L.debug("Converting to String");
L.debug(arg2);
SimpleEntityGroup g = (SimpleEntityGroup) arg2;
return g.getId().toString();
}
【问题讨论】: