2

我正在使用带有 Primefaces 的 JSF 2.0。我有一个页面,其中包含一个数据表,其中包含系统中的用户列表。每个用户都可以有一组角色,所以我想有一个按钮来选择一堆角色。我希望这是一个 ajax 选择器并且可以从其他页面重用,所以这就是我的布局。

用户列表页面

<h:form prependId="false">
<p:dataTable id="userList" var="user" value="#{userBean.users}">
    <p:column id="modelHeader">
        <f:facet name="header">
                Name
        </f:facet>
        <h:outputText value="#{user.name}" />
    </p:column>

    <p:column>
        <f:facet name="header">
                Select Roles
        </f:facet>
       <p:commandButton id="selectButton" oncomplete="roleDialog.show()" icon="ui-icon-search" title="Select Roles" />               
    </p:column>

</p:dataTable>
</h:form>

在用户列表页面中定义的对话框,但内容将被移动到包含以提高可重用性

<p:dialog header="Roles" widgetVar="roleDialog" resizable="true" id="roleDialog" modal="true">

    <h:form prependId="false">
    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">

    <p:dataTable id="roleList" var="user" value="#{roleBean.roles}">
    <p:column id="modelHeader">
        <f:facet name="header">
                Name
        </f:facet>
        <h:outputText value="#{role.name}" />
    </p:column>


    <p:commandButton id="selectButton" actionListener="#{roleBean.selectRoles}" title="Select Roles" />               


    </h:panelGrid>
    </h:form>
</p:dialog>

我的问题是,我不确定如何实现以下目标。

  • 我想在对话框中呈现内容之前将参数作为标准传递给角色选择器。我可以通过 f:setPropertyActionListener 来做到这一点。对吗?
  • 选择角色后,我想将选定的 id 传递回用户列表页面。我可以通过 addCallbackParam 做到这一点,对吗?
  • 然后我想将该值传递回 userList bean 到动作侦听器以将此角色与用户相关联

在 JSF 中实现此工作流的最佳模式是什么。我不想在每个页面中复制我的角色选择器,因为我想重复使用它。感谢您耐心阅读这篇长文。感谢您的回复和建议。

4

1 回答 1

1

最好的模式是实现一个复合组件

于 2012-07-29T11:31:27.683 回答