gpt4 book ai didi

java - 选择一个菜单未将所选值设置为后端

转载 作者:行者123 更新时间:2023-11-30 08:20:26 25 4
gpt4 key购买 nike

大家好,我在尝试从 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 方法,效果很好,我可以看到列表中的所有元素选择一个菜单

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();

setter和getter

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

提前感谢您的时间和回答

最佳答案

  1. 如果您使用转换器,则必须使用 IRepositorio 列表而不是使用的 SelectItem 列表。
  2. p:selectOneMenu 中使用自定义转换器时,您应该始终覆盖所涉及对象的 equals() 方法。对于您来说,您应该在存储库类中覆盖 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);
}

关于java - 选择一个菜单未将所选值设置为后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26061451/

25 4 0