动态更新a4j:使用表单中的数据重复

时间:2012-02-02 09:16:27

标签: jsf richfaces ajax4jsf

我有一个页面,用户可以将文件上传到服务器。他可以设置哪些组/用户可以读/写文件。

这是由选择完成的。一个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,并设置命令按钮来渲染它,页面会“正确”更新。

2 个答案:

答案 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 sitecomponent reference中查看。