2

if/elseタグを使用するいくつかの方法と、タグ内で使用する<tr>方法を既に見つけました。

しかし、<s:textfield>タグ内で使用することは可能ですか?

特定のパラメーターが true の場合、いくつかのフィールド (テキストフィールドと日付ピッカー) を無効にしたいと考えています。現時点では、コード全体を 2 回持っています。あるときと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. 2 つの 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}"

whereはまたはmyConditionに評価されます。truefalse

于 2014-11-17T10:38:16.193 に答える