1

我有 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>

这是我的分类转换器:

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

lookupCategoriaBeanLocal()Call Enterprise Bean是在 NetBeans 中使用自动生成的。可以看出,我将 valuegetAsObject与“Seleccione”进行比较,这是我第一个 selectOneMenu 中的 itemLabel,我不知道为什么要发送它。

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

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

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

问候。

4

0 回答 0