2012-02-02 37 views
1

我有一個頁面,用戶可以將文件上傳到服務器。他可以設置哪些組/用戶可以讀/寫文件。動態更新a4j:使用表格中的數據重複使用

這是通過選擇完成的。一個選擇保存用戶當前所在的組的名稱,並且在同一行上是具有選項「讀取」和「寫入」的選擇。第二行是用於選擇用戶的相應內容。

當用戶選擇一個組並對該組進行讀取或寫入時,他然後按下一個按鈕。按下按鈕後,我想向用戶顯示select下面的權限列表。該列表將具有組名稱,所述組的訪問設置和用於移除許可項目的按鈕。

我的問題是,我無法更新頁面並顯示權限列表。服務器端的權限被添加到一個ArrayList中,但我無法得到內容顯示在a4j:重複。我如何獲得重複標籤更新?

這是我一直在努力,到目前爲止做:

 <h:form> 
     <h:selectOneMenu value="#{assetUploadForm.currentGroupName}" valueChangeListener="#{assetUploadForm.groupNameChanged}"> 
      <f:selectItem itemValue="users" itemLabel="users" /> 
      <f:selectItem itemValue="foobar" itemLabel="Foobar" /> 
      <a4j:ajax event="valueChange" render="second" execute="@this" /> 
     </h:selectOneMenu> 

     <h:selectOneMenu value="#{assetUploadForm.currentGroupRW}" valueChangeListener="#{assetUploadForm.groupRWChanged}"> 
      <f:selectItem itemValue="R" itemLabel="Read"/> 
      <f:selectItem itemValue="W" itemLabel="Write"/> 
      <a4j:ajax event="valueChange" render="second" execute="@this" /> 
     </h:selectOneMenu> 

     <a4j:commandButton action="#{assetUploadForm.addGroupRights}" value="add group" render="groupList"/> 
     <ul> 
     <a4j:repeat value="#{assetUploadForm.groupPermissions}" var="permission" id="groupList"> 
      <li><h:outputText value="#{permission.permissionSetItemId}"/></li> 
     </a4j:repeat> 
     </ul> 
     </h:form> 

那麼,問題是A4J:重複從不更新。如果我用輸出文本替換重複項,並設置命令按鈕來渲染它,頁面將被「正確」更新。

回答

0

<a4j:repeat>不呈現任何HTML的響應。然而,<a4j:ajax>render屬性期望具有該ID的組件實際存在於HTML DOM樹中(即,在幕後使用JavaScript document.getElementById()東西來獲得在ajax響應返回之後需要更新的元素)。因此不可能與<a4j:repeat>結合使用。您需要指定其最父母的JSF HTML組件,或者至少將其包裝爲新的。

E.g.

<a4j:commandButton action="#{assetUploadForm.addGroupRights}" value="add group" render="groupList"/> 
<h:panelGroup id="groupList"> 
    <ul> 
    <a4j:repeat value="#{assetUploadForm.groupPermissions}" var="permission"> 
     <li><h:outputText value="#{permission.permissionSetItemId}"/></li> 
    </a4j:repeat> 
    </ul> 
</h:panelGroup> 

由於不同的替代方案,也可以只使用<rich:list>組件,而不是它爲你呈現完整<ul><li>了。你當時基本上直接更新<ul>

<a4j:commandButton action="#{assetUploadForm.addGroupRights}" value="add group" render="groupList"/> 
<rich:list id="groupList"> 
    <h:outputText value="#{permission.permissionSetItemId}"/> 
</rich:list> 

要了解哪些組件都是可用的,以及如何使用它們,在showcase sitecomponent reference偷看周圍。

+1

這聽起來像它可以工作:)我會在幾天內嘗試。非常感謝解釋!儘管我一直在觀察展示和組件參考,但是恐怕很多事情沒有被深入解釋(例如,我對這個問題沒有找到任何幫助)。一個人必須通過我的猜測來學習:) – 2012-02-03 06:48:37

+0

不客氣。 – BalusC 2012-02-07 11:56:23

0

我不知道它爲什麼不起作用,但作爲解決方法,您可能可以使用h:dataTable進行此操作。隨着一些CSS可以用相同的外觀進行調整。

或者在a4j:repeat周圍包裝一個a4j:outputPanel,並嘗試如果渲染它會發生什麼。

MAG, 米洛的van der Zee的

相關問題