如何更改 JSF 标记属性
Posted
技术标签:
【中文标题】如何更改 JSF 标记属性【英文标题】:How to change JSF tag attribute 【发布时间】:2013-12-22 02:26:08 【问题描述】:我有一个 Primefaces 数据表。
<p:dataTable id="updateStaffTable" var="staff" value="#staffBean.staffs"
selection="#staffBean.selectedStaff" selectionMode="single"
paginator="true" lazy="true" styleClass="dataTableSize" rows="10" >
<p:ajax event="rowSelect" listener="#staffBean.onRowSelect"
update=":updateStaffForm:updateStaffPanelGrid" oncomplete="PF('updateStaffDialog').show()" />
</p:dataTable>
现在,如果不允许用户,我想禁用选择属性。我可以以编程方式检查用户的权限。我也有一个 bean 来检查,但我不能在这里使用渲染属性。我该如何做到这一点,或者有没有其他好的方法可以做到这一点?
【问题讨论】:
你不想在数据表中渲染一些行吗? 我有 CRUD 权限。如果用户只有读取权限,则不应选择该行。我想让他看到数据但不更新和删除数据。当用户选择一行时,会打开一个对话框窗口以进行更新和删除操作。 【参考方案1】:只需像使用其他属性一样在属性中使用 EL。您可以使用条件运算符?:
在 EL 中执行 if-else。
例如仅当用户具有角色ADMIN
时才设置为single
:
selectionMode="#request.isUserInRole('ADMIN') ? 'single' : null"
至于为此建议 binding
的其他答案,不建议在仅在视图侧实现该功能时使用 binding
。如果你真的需要从 bean 上控制它,你甚至可以只做selectionMode="#bean.selectionMode"
。尽量避免在支持 bean 属性上使用 binding
,除非您需要动态填充组件,由于某些不清楚的原因无法在视图端完成(使用 JSTL,您可以做很多事情)。
【讨论】:
以上是关于如何更改 JSF 标记属性的主要内容,如果未能解决你的问题,请参考以下文章
我应该使用带有 render 属性的 ui:fragment 来有条件地在带有 JSF 2.2 的 Facelets 中呈现 HTML 标记吗?