Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “选择一个”菜单未将所选值设置为“后端”_Java_Jsf_Primefaces - Fatal编程技术网

Java “选择一个”菜单未将所选值设置为“后端”

Java “选择一个”菜单未将所选值设置为“后端”,java,jsf,primefaces,Java,Jsf,Primefaces,嗨,我在尝试从selectOneMenu组件中选择一个值时遇到了一个问题。我使用的是PrimeFaces5和JSF2 我有一个对象列表显示在SelectOne菜单中,当一个对象被选中时,一个后端变量(具有相同类型的对象)将显示该值。但是当我更改selectOneMenu中的值时,什么也没有发生,我的意思是不调用变量的setter方法 这是我的SelectOne菜单代码 <p:selectOneMenu id="selectRepositorio" value="#{cadastro

嗨,我在尝试从selectOneMenu组件中选择一个值时遇到了一个问题。我使用的是PrimeFaces5和JSF2

我有一个对象列表显示在SelectOne菜单中,当一个对象被选中时,一个后端变量(具有相同类型的对象)将显示该值。但是当我更改selectOneMenu中的值时,什么也没有发生,我的意思是不调用变量的setter方法

这是我的SelectOne菜单代码

<p:selectOneMenu id="selectRepositorio"
    value="#{cadastroDocumentoControler.repositorio}">
    <f:selectItems 
        value="#{cadastroDocumentoControler.items}"  />

     <p:ajax update="tree" event="change" /> 
</p:selectOneMenu>
接球手和二传手

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


}
最后,我在@SessionScope中处理了我的@ManagedBean

提前感谢您的时间和回答

  • 如果使用转换器,则必须使用IRepositorio列表而不是SelectItem的已用列表
  • p:selectOneMenu
    中使用自定义转换器时,应始终覆盖所涉及对象的equals()方法。对于您来说,应该在repositorio类中重写equal()。这是override equal()方法的一个示例

  • 非常感谢IRepositorio解决了我的问题非常感谢
    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;
    
    }
    
    @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();
    }
    
    
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null)
          return false;
        if (!(obj instanceof IRepositorio))
          return false;
        return ((ReferenceData) obj).getCode().equals(this.code);
    }