RichFaces - a4j:使用两个动态列表时不会触发ajax

时间:2012-08-01 03:03:33

标签: java ajax jsf richfaces jstl

带错误的代码如下:

<h:form>
    <rich:select defaultLabel="Seleccionar región" value="#{StaticInfo.regionElegida}">
        <f:selectItems value="#{StaticInfo.regiones.entrySet()}" var="region" itemValue="#{region.key}" itemLabel="#{region.value}" />
        <a4j:ajax event="change" render="provs" listener="#{StaticInfo.updateProvincias}" />
    </rich:select>
    <rich:select id="provs" defaultLabel="Seleccionar provincia" value="#{StaticInfo.provinciaElegida}">
        <f:selectItems value="#{StaticInfo.provincias.entrySet()}" var="prov" itemValue="#{prov.key}" itemLabel="#{prov.value}" />
        <a4j:ajax event="change" render="texto" />
    </rich:select>
    <h:outputText value="#{StaticInfo.provinciaElegida)}" id="texto" />
</h:form>

列表正确显示项目,bean具有provinciaElegida所需的getter和setter。现在,第二个选项的项目将取决于第一个选择中选择的内容。由于某种原因,outputText元素没有显示任何结果。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用<a4j:ajax event="change" render="texto" />

,而不是<a4j:support/>
<h:selectOneMenu id="selectOneMenu"  value="#{Bean1.val1}" >
    <f:selectItems value="#{Bean1.selectItems}"/>
    <a4j:support event="onchange" action="#{Bean1.onSelectOneMenuChange}" reRender="textbox1"   />
 </h:selectOneMenu>

<h:inputText id="textbox1" value="#{Bean1.textbox1}"> </h:inputText>

答案 1 :(得分:0)

这样我就不会回答这个问题......

问题是bean是Request stroped。正如路易吉所解释的那样:

  

当ManagedBean是RequestScoped时,它将为每个人创建   请求(甚至是ajax请求!)。如果您的托管bean必须处理更多   在同一视图中,它必须具有ViewScoped。

我试图在一个视图中提交几个请求,因此“重置”bean并有效地杀死它应该做的事情。当我将bean更改为@ViewScope时,它工作得很好。