【问题标题】:How to change JSF tag attribute如何更改 JSF 标记属性
【发布时间】: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 权限。如果用户只有读取权限,则不应选择该行。我想让他看到数据但不更新和删除数据。当用户选择一行时,会打开一个对话框窗口以进行更新和删除操作。

标签: jsf jsf-2 primefaces


【解决方案1】:

只需像使用其他属性一样在属性中使用 EL。您可以使用条件运算符?: 在 EL 中执行 if-else。

例如仅当用户具有角色ADMIN 时才设置为single

selectionMode="#{request.isUserInRole('ADMIN') ? 'single' : null}"

至于为此建议 binding 的其他答案,建议在仅在视图侧实现该功能时使用 binding。如果你真的需要从 bean 上控制它,你甚至可以只做selectionMode="#{bean.selectionMode}"。尽量避免在支持 bean 属性上使用 binding,除非您需要动态填充组件,由于某些不清楚的原因无法在视图端完成(使用 JSTL,您可以做很多事情)。

【讨论】:

    猜你喜欢
    • 2017-09-20
    • 2020-07-23
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多