我有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()
,没有更新,我不知道为什么。任何人都可以看到问题吗?
问候。