在第一个selectOneMenu上选择第一个元素时,清理第二个selectOneMenu

时间:2013-07-06 10:32:08

标签: java jsf-2 primefaces converter selectonemenu

我有2个selectOneMenu,第二个依赖于第一个。当我首先选择一个元素时,第二个选择右加载,但是当我选择默认元素Seleccione marca时,我想清理第二个选择(和其他元素)。我正在使用转换器。代码:

<p:selectOneMenu id="marcas" value="#{adminBean.marca}" converter="categoriaConverter" required="true">
  <f:selectItem itemLabel="Seleccione marca" itemValue="" />
  <f:selectItems value="#{categoriaBean.marcas}" var="cat" itemLabel="#{cat.nombre}" itemValue="#{cat}" />
  <p:ajax listener="#{adminBean.loadTipos}" update="tipos" />
</p:selectOneMenu>
<p:selectOneMenu id="tipos" value="#{adminBean.tipo}" converter="categoriaConverter" required="true">
  <f:selectItem itemLabel="Seleccione tipo" itemValue="" />
  <f:selectItems value="#{adminBean.tipos}" var="tip" itemLabel="#{tip.nombre}" itemValue="#{tip}" />
  <p:ajax listener="#{adminBean.loadProductos}" update=":formTablaProductos" />
</p:selectOneMenu>

这是我的categoriaConverter:

@FacesConverter(value = "categoriaConverter")
public class CategoriaConverter implements Converter {

  CategoriaBeanLocal categoriaBean = lookupCategoriaBeanLocal();

  @Override
  public Object getAsObject(FacesContext context, UIComponent component, String value) {
    Categoria categoria = null;
    if (value != null && !value.equals("") && !value.contains("Seleccione"))
      categoria = categoriaBean.findByIdCategoria(Integer.valueOf(value));
    return categoria;
  }

  @Override
  public String getAsString(FacesContext context, UIComponent component, Object value) {
    String salida = null;
    if (value != null && !value.equals("") && !value.equals("0"))
      salida = String.valueOf(((Categoria)value).getIdCategoria());
    return salida;
  }

  private CategoriaBeanLocal lookupCategoriaBeanLocal() {
    try {
      Context c = new InitialContext();
      return (CategoriaBeanLocal) c.lookup("java:global/TiendaOnline/TiendaOnline-ejb/CategoriaBean!ejb.CategoriaBeanLocal");
    } catch (NamingException ne) {
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
      throw new RuntimeException(ne);
    }
  }
}
在NetBeans中使用lookupCategoriaBeanLocal()自动生成

Call Enterprise Bean。可以看出,我将getAsObject中的值与'Seleccione'进行比较,这是我第一个selectOneMenu中的itemLabel,我不知道为什么要发送它。

更多代码,这是我的loadTipos()

public void loadTipos() {
  if (marca != null) {
    tipos = categoriaBean.findByIdCategoriaPadre(marca.getIdCategoria());
  } else {
    tipos.clear();
  }
}

问题在于,当我选择Seleccione marca时,没有到loadTipos(),没有更新,我不知道为什么。任何人都可以看到问题吗?

问候。

0 个答案:

没有答案