2

我已经找到了几种使用if/else标记的方法以及如何在<tr>标记中使用它。

但是可以在<s:textfield>标签中使用它吗?

如果某个参数为真,我想禁用几个字段(文本字段和日期选择器)。目前,我有两次完整的代码。一次有disable="true",一次没有。这使得jsp 非常冗长。

如果有更好/更短的方法,我会很高兴。

4

2 回答 2

4

这个问题有很多解决方案,每一个都根据标签的数量、所需的最干净/最短的代码比率等来更好地拟合它……

例如,您可以

  1. 设置一个变量并在您的文本字段中使用它:

    <s:set var="disabled" value="%{condition}"/>
    <s:textfield ... disabled="%{#disabled}" />
    
  2. 使用返回布尔值的操作方法,如@PredragMaric 答案:

    public boolean getConditionFromAction(){
        return (foo!=bar);
    }
    
    <s:textfield ... disabled="%{conditionFromAction}" />
    
  3. 创建两个 JSP 片段并包含它们(在刚刚禁用的情况下过度杀伤,但在其他情况下很有帮助,例如显示一组完全不同的字段)

    <s:if test="%{condition}">
        <s:include page="snippetA.jsp" />
    </s:if>
    <s:else>
        <s:include page="snippetB.jsp" />
    </s:else>
    

    (在这种情况下,记得把

    <%@ taglib prefix="s" uri="/struts-tags" %>
    

    也在片段中)。

  4. 在页面加载时使用 javascript 禁用它们(使用 jQuery 的示例):

    <script>
        $(function(){
            <s:if test="%{condition}">
                $("input[type='text']").attr('disabled','disabled');
            </s:if>
            <s:else>
                $("input[type='text']").removeAttr('disabled');
            </s:else>
        });
    </script>
    

    (更好地使用类选择器)。

关于您的最新评论:

如果某个条件为真,我想禁用这些字段以使进一步的编辑变得不可能。

请记住,您必须在服务器端执行控制,因为每个用户都可以更改 HTML / DOM(使用 Firebug、FF DevTools、Chrome DevTools 等),或者只是临时伪造请求,甚至无需访问您的页面,并启用您已禁用的字段。

客户端验证是用户友好的,并被视为第一个过滤器,服务器端验证是强制性的。

于 2014-11-17T11:37:51.130 回答
2

尝试在里面使用这个表达式<s:textfield>

disabled="%{myCondition}"

wheremyCondition应该评估为trueor false

于 2014-11-17T10:38:16.193 回答