【问题标题】:Struts2 disable <s:textfield> using some expressionStruts2 使用某些表达式禁用 <s:textfield>
【发布时间】:2011-10-19 06:03:42
【问题描述】:

我的应用中有两个角色,ROLE_ADMIN 和 ROLE_USER 我还有一个包含一些字段的表格。我想要以下内容: 当用户具有 ADMIN 角色时,他能够编辑特定的字段组,当用户具有 USER 角色时,他无法编辑这些字段。我不想有两个不同的表单,或者每个角色有两个字段副本。

我试图做这样的事情:

disabled="${myFlag}" >,其中 myFlag 从角色进行评估。

但我有警告“禁用”不支持运行时表达式。

有没有办法做到这一点?或者也许有更好的方法,例如,将生成的输入替换为标签?

提前致谢。

【问题讨论】:

    标签: jsp struts2 expression


    【解决方案1】:

    您应该在 Struts2 标记中使用 OGNL 表达式 by %{expression} 语法。

    <s:textfield disabled="%{myFlag}" />
    

    如何在页面上设置这样的变量?

    不适用于%{myFlag}?或者你可以设置变量

    <s:set var="flag">${myFlag}</s:set>
    

    实施:

    <s:textfield disabled="#flag" />
    

    【讨论】:

    • 如何在页面上设置这样的变量?我尝试了 c:set 或 s:set,不能使用 OGNL
    【解决方案2】:

    cssClass 属性添加到这些字段并编写一个javascript 函数,该函数应在主体onload 事件上调用

    function calledonbodyload() {
     <s:if test="%{role=='ROLE_USER'}">
       document.getElementsByClass("yourClass").disabled=true;
     </s:if>
    }
    

    我不确定 getElementByClass() 在普通的 javascript 中,但 jQuery 的 $(".yourClass").attr('disabled',true); 可以完美地工作

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多