在textfield中使用if / else?

时间:2014-11-17 10:20:02

标签: java jsp struts2 ognl struts-tags

我已经找到了几种使用if / else代码和how to use it within a <tr> tag的方法。

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

如果某个参数为true,我想禁用多个字段(textfields和datepicker)。目前,我有两次完整的代码。一次使用disable="true",一次不使用。这使得jsp非常冗长。

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

2 个答案:

答案 0 :(得分:4)

这个问题有很多解决方案,每个解决方案都根据标签的数量,所需的最干净/最短的代码比等更好地适应它......等等。

例如,你可以

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

    <s:set var="disabled" value="%{condition}"/>
    <s:textfield ... disabled="%{#disabled}" />
    
  2. 使用返回布尔值的action方法,如@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>
    

    (最好使用类选择器)。

  5. 关于您的最新评论:

      

    如果某个条件为真,我想禁用这些字段,以便无法进行进一步的编辑。

    记住你MUST perform the controls server side,因为每个用户都能够改变HTML / DOM(使用Firebug,或FF DevTools,Chrome DevTools等......)或只是伪造一个请求 ad-hoc < / em>甚至没有访问您的页面,并启用您已禁用的字段。

    客户端验证是用户友好的,并且作为第一个过滤器受到赞赏,服务器端验证是强制性的。

答案 1 :(得分:2)

<s:textfield>

中尝试使用此表达式
disabled="%{myCondition}"

其中myCondition应评估为truefalse