我有一个页面,用户可以将文件上传到服务器。他可以设置哪些组/用户可以读/写文件。
这是由选择完成的。一个select保存用户当前所在组的名称,同一行是一个带有Read和Write选项的select。在第二行是用于选择用户的相应内容。
当用户选择一个组并为所述组选择“读取”或“写入”时,他会按下一个按钮。按下按钮后,我想向用户显示选择下方的权限列表。该列表将具有组名称,所述组的访问设置以及用于删除权限项的按钮。
我的问题是,我无法更新页面并显示权限列表。服务器端将权限添加到ArrayList,但我无法获取要在a4j:repeat中显示的内容。如何更新重复标签?
到目前为止,我一直在努力做到这一点:
<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:重复永远不会更新。如果我用outputtext替换repeat,并设置命令按钮来渲染它,页面会“正确”更新。
答案 0 :(得分:0)
我不知道它为什么不起作用,但作为一种解决方法,你可以使用h:dataTable。有些css调整可以使用相同的外观进行渲染。
或者围绕a4j包装a4j:outputPanel:重复并尝试渲染时会发生什么。
MAG, Milo van der Zee
答案 1 :(得分:0)
<a4j:repeat>
不会向响应呈现任何HTML。然而,render
的{{1}}属性要求具有该ID的组件实际存在于HTML DOM树中(即使用JavaScript <a4j:ajax>
内容在幕后获取需要的元素在ajax响应返回后更新)。因此,与document.getElementById()
结合使用是不可能的。您需要指定其最基本的JSF HTML组件,或者至少将其包装在新组件中。
E.g。
<a4j:repeat>
作为另一种选择,您也可以使用<rich:list>
组件,而不是为您呈现完整的<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>
。您基本上是直接更新<ul><li>
。
<ul>
要了解哪些组件可用以及如何使用它们,请在showcase site和component reference中查看。