Ajax 如何在JSF2中正确使用f:selectItem?
伙计们,当用户选择combo_pedido_tipoplm selectOneMenu的一个选项时,我需要更新另一个selectOneMenu。如果用户选择“选择一个”选项,则需要清除第二个选项 我已经尝试了所有方法,但是在我从h:SelectOne菜单中选择了选项“SelectOne”(SelectOne)之后,我无法调用actionListener XHTMLAjax 如何在JSF2中正确使用f:selectItem?,ajax,jsf-2,Ajax,Jsf 2,伙计们,当用户选择combo_pedido_tipoplm selectOneMenu的一个选项时,我需要更新另一个selectOneMenu。如果用户选择“选择一个”选项,则需要清除第二个选项 我已经尝试了所有方法,但是在我从h:SelectOne菜单中选择了选项“SelectOne”(SelectOne)之后,我无法调用actionListener XHTML 姆宾 私人蒂波普拉卡梅蒂波普拉卡梅菲特罗; 公共空间popularTipoPlacaMae(){ this.selectItem
姆宾
私人蒂波普拉卡梅蒂波普拉卡梅菲特罗;
公共空间popularTipoPlacaMae(){
this.selectItemsTipoPlacaMae=newArrayList();
对于(TipoPlacaMae tipoplaca:TipoPlacaMae.values()){
this.selectitemstipoplacame.add(新的SelectItem(tipoplaca,tipoplaca.getNome());
}
UtilsCommon.orderByLabel(selectItemsTipoplacame);
}
公共无效TipoplacameChange(AjaxBehaviorEvent e){
//这是一个非常美丽的地方。
长柄山猫(空);
limparDadosPedido();
popularPlacaMae();
}
如果我选择选项“Selected one”,我会得到一个验证错误,因为这个SelectOne菜单会被重新查询,并且我的tipoPlacaMaeFiltro设置程序不会被调用
<?xml version='1.0' encoding='UTF-8'?>
{“validationFailed”:true}
对此我能做些什么?对于那些有同样疑问的人 您需要在ajax请求中输入immediate=“true”
<h:selectOneMenu id="id"
value="#{mbean.value}" required="#{mbean.required}"
converter="#{mbean.converter}">
<f:selectItem itemLabel="Chose one" />
<f:selectItems value="#{mbean.selectItems}" />
<f:ajax event="valueChange" listener="#{mbean.onchange}"
render="second_combo"
immediate="true">
</f:ajax>
</h:selectOneMenu>
不幸的是,您必须以这种方式处理,因为如果您不这样做,用户可以选择“selected One”,并且mbean.value将是OK(null),之后,同一SelectOne菜单中的第二个选择将使用以前选择的值(null)触发。我不知道这是发生在每个人身上还是只发生在我身上
再见。对于那些有同样疑问的人 您需要在ajax请求中输入immediate=“true”
<h:selectOneMenu id="id"
value="#{mbean.value}" required="#{mbean.required}"
converter="#{mbean.converter}">
<f:selectItem itemLabel="Chose one" />
<f:selectItems value="#{mbean.selectItems}" />
<f:ajax event="valueChange" listener="#{mbean.onchange}"
render="second_combo"
immediate="true">
</f:ajax>
</h:selectOneMenu>
不幸的是,您必须以这种方式处理,因为如果您不这样做,用户可以选择“selected One”,并且mbean.value将是OK(null),之后,同一SelectOne菜单中的第二个选择将使用以前选择的值(null)触发。我不知道这是发生在每个人身上还是只发生在我身上
再见
<h:selectOneMenu id="id"
value="#{mbean.value}" required="#{mbean.required}"
converter="#{mbean.converter}">
<f:selectItem itemLabel="Chose one" />
<f:selectItems value="#{mbean.selectItems}" />
<f:ajax event="valueChange" listener="#{mbean.onchange}"
render="second_combo"
immediate="true">
</f:ajax>
</h:selectOneMenu>
public void onchange(AjaxBehaviorEvent e) {
YourClass o = getSelectedValue(e);
}
private YourClass getSelectedValue(AjaxBehaviorEvent e)
{
if (e != null)
{
UISelectOne select = (UISelectOne) e.getSource();
if (select.getSubmittedValue() == null ||
select.getSubmittedValue().toString().isEmpty()) {
return null;
}
else {
String id = select
.getSubmittedValue().toString();
return ObjectThatImplementsConverterInterface.getAsObject(FacesContext.getCurrentInstance(), select, id);
}
}
return null;
}