2012-12-02 32 views
0

我有一個彈出式面板(id = PanelAddQueryCriteria)定義在jsf頁面的頂部,但它只在用戶選擇菜單項(id = entityKind)並重新渲染那個popupPanel。然而,由於該重新渲染,在該彈出面板中選擇項目(id = queryCriteriaAttr)不會在第一次更改值時觸發更改偵聽器(#{ceaDBBean.queryCriteriaAttrChanged}),並且只有在再次選擇時才觸發...任何幫助?這裏代碼:valueChangeListener for <h:selectOneMenu>在重新呈現時不起作用<rich:popupPanel>

<rich:popupPanel id="PanelAddQueryCriteria"> 
    <h:form id="formAddQueryCriteria"> 
    <h:selectOneMenu id="queryCriteriaAttr" 
     value="#{ceaDBBean.queryCriteriaAttr}" required="true" 
     valueChangeListener="#{ceaDBBean.queryCriteriaAttrChanged}"> 
     <f:selectItems value="#{ceaDBBean.ceaEntityKindAttrs}"/> 
    </h:selectOneMenu> 
    </h:form> 
</rich:popupPanel> 

<h:panelGrid id="searchPanel"> 
    <h:selectOneMenu id="entityKind" 
    value="#{ceaDBBean.entityKind}" required="true" 
    valueChangeListener="#{ceaDBBean.entityKindChanged}"> 
    <a4j:ajax event="valueChange" render="addQueryCriteria" execute="@this" /> 
    <f:selectItems value="#{ceaDBBean.ceaEntityKinds}" /> 
    </h:selectOneMenu> 

    <a4j:commandLink styleClass="no-decor" id="addQueryCriteria" 
    render="PanelAddQueryCriteria" 
    disabled="#{empty ceaDBBean.entityKind}" 
    execute="@this" action="#{ceaDBBean.initAddQuryCriteria}" 
    oncomplete="#{rich:component('PanelAddQueryCriteria')}.show()"> 
    <h:graphicImage id="addQueryCriteriaImg" 
     value="/images/icons/common/new.gif" width="16" height="16" 
     alt="#{adminMsg.addQueryCriteria}" /> 
     <rich:tooltip value="#{adminMsg.addQueryCriteria}" for="addQueryCriteria" /> 
    </a4j:commandLink>  
</h:panelGrid> 

回答

0

簡短回答:這個問題是由JSF issue 790造成的。更改

render="PanelAddQueryCriteria" 

通過

render="formAddQueryCriteria" 

也許,如果你有其實更成需要的不僅僅是形式本身要更新的面板,

render="PanelAddQueryCriteria formAddQueryCriteria" 

長一點的回答:閱讀以下相關問題: