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