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