【问题标题】:ajax is not updating a component situated in another <ui:defineajax 没有更新位于另一个 <ui:define 中的组件
【发布时间】:2012-10-29 01:49:35
【问题描述】:

嗨,我有一个命令链接,所以当点击它时,我 action="#{projectAdminisrationMB.showGroups(userObj)}" 将渲染一个字段集 &lt;p:fieldset legend="Manage User Groups" id="manageUserGroupsFS" rendered="#{projectAdminisrationMB.manageUserGroupsFSFlag}"&gt; 当字段集在同一个 &lt;ui:define name="body"&gt; 中时,一切正常,但是当我把它放在一个单独的 ui:define 中时,它不会被渲染。

代码如下:

<ui:define name="body">

         <h:form id="manageProjeUFform">  

            <div class="right">

             <p:growl id="growl" showDetail="true" sticky="true" />  

             <br/><br/><br/><br/>

<h:panelGrid columns="2" cellpadding="10">  

   <p:column>
            <p:fieldset legend=" Users ">  
               <h:panelGrid columns="2" cellpadding="10">  

             <p:dataTable border="1" value="#{projectAdminisrationMB.projectUsersList}"
                    id="projectUserDt" 
                    var="userObj"
                    rowKey="#{userObj.name}"
                     selection="#{projectAdminisrationMB.selectedExistingProjectUser}"
                     selectionMode="single"
                     rowIndexVar="rowIndex"
                      binding="#{table1}">
                        <p:column id="column1">
                            <f:facet name="header">
                                <h:outputText value="Login"></h:outputText>
                            </f:facet>


                           <h:outputText value="#{userObj.name}"/>  


                        </p:column>
                        <p:column id="column2">
                            <f:facet name="header">
                                <h:outputText value="Entire Name"></h:outputText>
                            </f:facet>
                            <h:outputText value="#{userObj.lastName}"></h:outputText>



                            <h:outputText value="#{userObj.firstName}"></h:outputText>
                         </p:column>


                                <p:column id="column5">
                            <f:facet name="header">
                                <h:outputText value="Groups"></h:outputText>
                            </f:facet>

                             <p:commandLink id="manageUG"  title="Manage User Groups" style="margin-right:5px"  update=":rightContentform:manageUserGroupsFS"   action="#{projectAdminisrationMB.showGroups(userObj)}"  ajax="true"> 
                                   <h:graphicImage value="../images/cssImg/manage-groups-icon.png"   />

                                 <f:setPropertyActionListener target="#{projectAdminisrationMB.selectedUserRow}" value="#{userObj}" />
                                 <f:setPropertyActionListener target="#{projectAdminisrationMB.selectedUserRow.dbRowIndex}" value="#{table.rowIndex}" />

                            </p:commandLink>   



                         </p:column>

                         <f:facet name="footer">  


                  <p:commandButton id="addProjectUserdlg" value=" Add " onclick="dlg1.show()"  />  
                  <p:commandButton id="deleteProjectUserdlg" value=" Delete "  onclick="confirmation.show()"/>  

                          </f:facet> 

                </p:dataTable>

               </h:panelGrid>  
             </p:fieldset>  

        </div>

         </h:form>
     </ui:define>

   <h:panelGrid columns="3">
    <h:panelGrid id="display" header="User Detail" columns="2" cellpadding="4">  

                           <f:facet name="header">  
                             <p:graphicImage value="/images/users/user.png"/>  
                          </f:facet>   

                            <h:outputText value="Login:" />  
                            <h:outputText value="#{projectAdminisrationMB.selectedUserRow.lastName}" />  

                            <h:outputText value="Name:" />  
                            <h:outputText value="#{projectAdminisrationMB.selectedUserRow.lastName}" />  

                            <h:outputText value="First Name:" />  
                            <h:outputText value="#{projectAdminisrationMB.selectedUserRow.firstName}" />  

                            <h:outputText value="Email:" />  
                            <h:outputText value="#{projectAdminisrationMB.selectedUserRow.email}" />  

                            <h:outputText value="Phone:" />  
                            <h:outputText value="#{projectAdminisrationMB.selectedUserRow.phoneNumber}" />  

                      </h:panelGrid>  

           <p:pickList id="pickList" value="#{projectAdminisrationMB.selectedUserGroups}" var="group"   
            itemLabel="#{group}" itemValue="#{group}" converter="groupConverter" > 

             <f:facet name="sourceCaption">Belong To</f:facet>  
             <f:facet name="targetCaption">Exclude From</f:facet> 

              <p:column style="width:25%">  
                    <p:graphicImage value="/images/group/#{group.name}.gif" />  
               </p:column>  

             <p:column style="width:75%;">  
                  #{group.name}  
             </p:column> 
              <p:ajax event="transfer" listener="#{projectAdminisrationMB.onTransferGroup}" update=":manageProjeUFform:growl" />  
             </p:pickList>

             <p:commandButton id="saveGroupsBtn" value="Save"  update=":manageProjeUFform:growl" actionListener="#{projectAdminisrationMB.saveUserGroupsModif}"/>  



          </h:panelGrid>
  </p:fieldset>
</h:form>
  </ui:define>

任何帮助将不胜感激。

【问题讨论】:

  • 显然,这是一个模板问题,换句话说,您无法使用 ajax 从另一个 'ui:define' 更新组件(我们也有同样的问题)
  • 最重要的部分是不可见的,缩进是错误的,pickList&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt; 是无关紧要的等等等等。你能改进你的问题吗?
  • 这是相当多的代码噪音。例如,&lt;div class="right"&gt;style="width:25%"&lt;h:outputText value="Login:" /&gt; 对于我们通过复制'n'粘贴'n'运行给定代码来重现您的具体问题是绝对必要的吗?不?只是省略它们。这样,只需查看代码就可以更快地发现代码中的问题。

标签: ajax jsf primefaces


【解决方案1】:

这是解决方案,享受吧:)

<p:commandLink id="manageUG"  title="Manage User Groups" style="margin-right:5px"  
 update="@all"   action="#{projectAdminisrationMB.showGroups(userObj)}"  ajax="true"> 
                                   <h:graphicImage value="../images/cssImg/manage-groups-icon.png"   />

                                 <f:setPropertyActionListener target="#{projectAdminisrationMB.selectedUserRow}" value="#{userObj}" />
                                 <f:setPropertyActionListener target="#{projectAdminisrationMB.selectedUserRow.dbRowIndex}" value="#{table.rowIndex}" />

                            </p:commandLink>

我用@all 更新了ui定义部分

【讨论】:

  • 如果您详细解释您所做的更改,将会很有帮助。这在此代码噪声中确实是不可见的。是链接ID属性吗?是链接标题属性吗?它是链接样式属性吗?是链接更新属性吗?它是链接ajax属性吗?等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2016-12-16
  • 2020-07-01
  • 2017-06-12
相关资源
最近更新 更多