多个f:ajax调用多个h:selectOneMenu

时间:2012-03-24 06:46:28

标签: java ajax jsf mojarra

考虑以下形式:
1.用户从selectOneMenu“selectorDB”中选择一个值 2. Ajax调用返回第二个selectOneMenu的项目,并使整个“第二个”panelGroup呈现为
3.用户从第二个selectOneMenu中选择一个值 4. Ajax调用返回String,它放在inputText和panelGroup中,包含所呈现的inputText。

一切正常,直到我没有从第二个selectOneMenu中选择一个值。甚至没有调用第四个动作的Ajax。我已经放置了一些控制台System.out来检查监听器是否被调用并且什么也没得到。

这有可能像我试图做的那样吗?
感谢您的回复。

* JSF:

<h:form>
    <h:panelGroup id="first">
        <h:outputLabel value="Select a database to make queries against" for="selectorDB" />
        <h:selectOneMenu id="selectorDB" value="#{sparqlQuerier.chosenRing}">
            <f:selectItem itemLabel="Select..." itemValue="0" /> 
            <f:selectItems value="#{sparqlQuerier.ringTitles}" />
            <f:ajax render="second third" listener="#{sparqlQuerier.firstListener}"/>
        </h:selectOneMenu>
    </h:panelGroup>
    <br />
    <h:panelGroup id="second">
        <h:outputLabel rendered="#{sparqlQuerier.doRenderSecond}" value="Select a query to execute" for="selectorQuery" />
        <h:selectOneMenu rendered="#{sparqlQuerier.doRenderSecond}" id="selectorQuery" value="#{sparqlQuerier.chosenQuery}">
            <f:selectItem itemLabel="Select..." itemValue="0" />
            <f:selectItems value="#{sparqlQuerier.queries}" />
            <f:ajax render="third" listener="#{sparqlQuerier.secondListener}"/>
        </h:selectOneMenu>
    </h:panelGroup>
    <br />
    <h:panelGroup id="third">
        <h:inputText rendered="#{sparqlQuerier.doRenderThird}" value="#{sparqlQuerier.queryBody}" onfocus="if (this.value == '#{sparqlQuerier.queryBody}') {this.value = '';}" onblur="if (this.value == '') {this.value ='#{sparqlQuerier.queryBody}';}" />
    </h:panelGroup>
</h:form>

bean:

public void firstListener(AjaxBehaviorEvent event) 
{
    doRenderThird = false;
    doRenderSecond = false;
    if(chosenRing!=0)
    {
            doRenderSecond = true;
            try 
            {
                // returning rows from the database...
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
            }
    }
}
public void secondListener(AjaxBehaviorEvent event) 
{
    doRenderThird=false;
    if(chosenQuery!=0)
    {
        if(chosenQuery==-1)
        {
            queryBody="body #1";
        }
        else
        {
            queryBody="body #2";
        }
        doRenderThird=true;
    }
    System.out.println(chosenQuery);
    System.out.println(doRenderThird);
}

0 个答案:

没有答案