在DOM中引用JSF组件

时间:2012-06-14 09:27:08

标签: ajax jsf dom

在DOM中永久提供组件的最佳方法是什么?我目前有以下内容:

<h:form id="navigationForm">
           <pou:menu id="navigationMenu">  
                    <pou:submenu label="#{web['NavigationMenuLabel']}">  

                        <pou:menuitem value="#{web['NavigationMenuDashboard']}"
                                      action="#{accountData.viewAccountDashboard()}"
                                      update=":accountForm:accounts"/>

                        <pou:menuitem value="#{web['NavigationMenuRoleOneAccounts']}"
                                      action="#{accountData.viewRoleOneAccounts()}"
                                      update=":accountForm:accounts"/>

                    </pou:submenu>   
          </pou:menu> 
</h:form>

<h:form id="accountForm" rendered="#{accountData.renderTables()}">  

                #{accountData.populateDataTable()}

                <pou:dataTable id="accounts" 
                               var="account"
                               paginator="true" 
                               rows="10"
                               emptyMessage="#{web['NoAccountsData']}"
                               selection="#{accountData.selectedAccounts}"
                               rowKey="#{account.uuid}"
                               value="#{accountData.accountDataModel}"> 
...

问题是......毫不奇怪,accountForm并不总是存在(这就是重点)所以它不会更新。

1 个答案:

答案 0 :(得分:1)

我不知道为什么我之前没想过这个!您需要做的就是包装永久存在的UI组件。我使用<h:panelGroup>,但我想你可以使用适合你情况的东西。所以在我的情况下:

<h:form id="navigationForm">
       <pou:menu id="navigationMenu">  
                <pou:submenu label="#{web['NavigationMenuLabel']}">  

                    <pou:menuitem value="#{web['NavigationMenuDashboard']}"
                                  action="#{accountData.viewAccountDashboard()}"
                                  update=":example"/>

                    <pou:menuitem value="#{web['NavigationMenuRoleOneAccounts']}"
                                  action="#{accountData.viewRoleOneAccounts()}"
                                  update=":example"/>

                </pou:submenu>   
      </pou:menu> 
</h:form>

<h:panelGroup id="example" layout="block">
    <h:form rendered="#{accountData.renderTables()}">  

            #{accountData.populateDataTable()}

            <pou:dataTable id="accounts" 
                           var="account"
                           paginator="true" 
                           rows="10"
                           emptyMessage="#{web['NoAccountsData']}"
                           selection="#{accountData.selectedAccounts}"
                           rowKey="#{account.uuid}"
                           value="#{accountData.accountDataModel}"> 
    ...
</h:panelGroup>