大家好我在尝试从selectOneMenu组件中选择一个值时遇到了问题。我正在使用primefaces 5和jsf 2
我有一个要在selectOneMenu中显示的对象列表,当选择一个对象时,后端变量(具有相同类型的对象)应该警告该值。但是,当我更改selectOneMenu中的值时,没有任何反应意味着不会调用变量的setter方法。
这是我的selectOneMenu代码
<p:selectOneMenu id="selectRepositorio"
value="#{cadastroDocumentoControler.repositorio}">
<f:selectItems
value="#{cadastroDocumentoControler.items}" />
<p:ajax update="tree" event="change" />
</p:selectOneMenu>
这是用于填充列表项的get方法,并且效果很好,我可以看到所有元素 selectOneMenu用于
public List<SelectItem> getItems(){
listarRepositorios();
items.add(0, new SelectItem("", "choose one..."));
for(IRepositorio repositorio: repositorioList){
SelectItem si = new SelectItem(repositorio,repositorio.getNome());
items.add(si);
}
return items;
}
我的repositorio变量,该变量应该注意选定的值
private IRepositorio repositorio = EntityBeanFactory.getRepositorio();
吸气者和二传手
public void setRepositorio(IRepositorio repositorio) {
this.repositorio = repositorio;
System.out.println("valor after execute setRepositorio: "+repositorio);
}
public IRepositorio getRepositorio() {
System.out.println("value in the method getRepositorio: "+repositorio);
return repositorio;
}
主要的问题是没有调用setter方法,我没有转换器但转换器错误没有打印,但我创建了一个,但仍然没有任何反应
我的转换器
@FacesConverter(forClass=Repositorio.class)
public class RepositorioConverter implements Converter {
private IRepositorioDAO repositorioDAO = DAOFactory.getRepositorioDAO();
@Override
public Object getAsObject(FacesContext context, UIComponent component,
String idRepositorio) {
if (idRepositorio==null || idRepositorio.trim().length()==0) {
return null;
}
return repositorioDAO.find(Integer.parseInt(idRepositorio));
}
@Override
public String getAsString(FacesContext context, UIComponent component,
Object value) {
IRepositorio repositorio = (IRepositorio) value;
Integer id = repositorio.getId();
return id.toString();
}
}
最后我在@SessionScoped
中拥有了我的@ManagedBean提前感谢您的时间和答案
答案 0 :(得分:3)
p:selectOneMenu
中使用自定义转换器时,应始终覆盖所涉及对象的equals()方法。对于你,你应该在repositorio类中覆盖equal()。这是覆盖equal()方法的一个例子。@Override public boolean equals(Object obj) { if (obj == null) return false; if (!(obj instanceof IRepositorio)) return false; return ((ReferenceData) obj).getCode().equals(this.code); }