JSF / PrimeFaces - 创建可重用数据表对话框的方法

时间:2012-07-27 21:15:21

标签: jsf

我正在使用带有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中实现此工作流程的最佳模式是什么。我不想在每个页面中复制我的角色选择器,因为我想重新使用它。 感谢您耐心阅读这篇长篇文章。我感谢您的回复 建议。

1 个答案:

答案 0 :(得分:1)

最好的模式是实现composite component