jsf selectOneMenu 转换器获取项目列表作为值
jsf selectOneMenu converter gets list of items as value
我有一个 jsf 2 select 输入,其中一个转换器绑定到 select 条目。我的对象有一个 id 字段,它很长,应该是值。当我的转换器被调用时,它被调用 select 项目的整个列表 (List<SimpleEntityGroup>
) 而不是 SimpleEntityGroup
所以我可以 return .getId()
组的。
调试输出为:
Converting to String
[SimpleEntityGroup [id=1, name=Group 1], SimpleEntityGroup [id=2, name=Group 2], SimpleEntityGroup [id=3, name=Group 3]]
我希望每次用一个 SimpleEntityGroup 调用该方法 3 次,而不是一次将所有 3 个都作为一个列表调用。该方法应该 return 一个字符串,如果我 return “1” 那么我在 select 中的所有值都是一个,所以我知道它在正确的位置使用了转换器.为什么这样称呼它?
<h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="SimpleEntityGroupConverter">
<f:selectItems value="#{simpleEntityBacking.groups}" var="c"
itemLabel="#{c.name}" itemValue="#{c.id}" />
</h:selectOneMenu>
这是我的支持 bean - getters 和 setters 并且全部省略:
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();
}
找到答案,select 需要如下所示:
<h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="#{simpleEntityGroupConverter}">
<f:selectItems value="#{simpleEntityBacking.groups}" var="c"
itemLabel="#{c.name}" />
</h:selectOneMenu>
请注意,转换器周围有一个#{},并且未指定 itemValue。
现在,转换器必须如下所示:
@ManagedBean
@ApplicationScoped
public class SimpleEntityGroupConverter implements Converter {
private static final Logger L = Logger.getLogger(SimpleEntityGroupConverter.class);
@EJB
private SimpleEntityDao ed;
class 的 JSF 转换器注释不允许 EJB 注入,因此您必须注释为托管 bean 并在 select.[=12 中执行 value=#{} =]
我有一个 jsf 2 select 输入,其中一个转换器绑定到 select 条目。我的对象有一个 id 字段,它很长,应该是值。当我的转换器被调用时,它被调用 select 项目的整个列表 (List<SimpleEntityGroup>
) 而不是 SimpleEntityGroup
所以我可以 return .getId()
组的。
调试输出为:
Converting to String
[SimpleEntityGroup [id=1, name=Group 1], SimpleEntityGroup [id=2, name=Group 2], SimpleEntityGroup [id=3, name=Group 3]]
我希望每次用一个 SimpleEntityGroup 调用该方法 3 次,而不是一次将所有 3 个都作为一个列表调用。该方法应该 return 一个字符串,如果我 return “1” 那么我在 select 中的所有值都是一个,所以我知道它在正确的位置使用了转换器.为什么这样称呼它?
<h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="SimpleEntityGroupConverter">
<f:selectItems value="#{simpleEntityBacking.groups}" var="c"
itemLabel="#{c.name}" itemValue="#{c.id}" />
</h:selectOneMenu>
这是我的支持 bean - getters 和 setters 并且全部省略:
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();
}
找到答案,select 需要如下所示:
<h:selectOneMenu value="#{simpleEntityBacking.simpleEntity.group}" converter="#{simpleEntityGroupConverter}">
<f:selectItems value="#{simpleEntityBacking.groups}" var="c"
itemLabel="#{c.name}" />
</h:selectOneMenu>
请注意,转换器周围有一个#{},并且未指定 itemValue。
现在,转换器必须如下所示:
@ManagedBean
@ApplicationScoped
public class SimpleEntityGroupConverter implements Converter {
private static final Logger L = Logger.getLogger(SimpleEntityGroupConverter.class);
@EJB
private SimpleEntityDao ed;
class 的 JSF 转换器注释不允许 EJB 注入,因此您必须注释为托管 bean 并在 select.[=12 中执行 value=#{} =]