3

String に対して null チェックを実行しようとしていますが、うまくいきません。

<s:iterator value="matrix" var="row">
    <tr>
       <s:iterator value="value" var="col">
            <td>    
                <s:if test="%{#col==null}">0</s:if>
                <s:else><s:property value="col"/></s:else>
            </td>
        </s:iterator>
    </tr>
</s:iterator>

行列は

Map<Integer, List<String>>

変数「col」には、リストからの文字列値が正しく割り当てられています。
リストは次のようになります [ "hello" , null , "world ]

現在の出力: hello world
必要な出力: hello 0 world

/前もって感謝します

4

5 に答える 5

4

# なしで試してみてください。

 <s:if test="%{col==null}">0</s:if>

has は最初に「col」を解決しようとし、col の値をプロパティ名として使用すると思います。それは空なので、値スタックの一番上にあるプロパティ名として "" の比較を行います。それがここでどう評価されるかはわかりません。

私はいつも次のようなものを使用します:

<s:if test="%{licenseStatusString != null}">
 ... something that uses licenseStatusString
</s:if>
于 2010-08-19T15:01:17.693 に答える
3

Struts2.1.x 以降では attribute がattribute に置き換えられidいるため、Struts2.0.x 以降のバージョンを使用しているかどうかによって異なります。vars:iterator

Struts 2.1.x を想定すると、最善の方法は、var属性を割り当てて変数として使用することです (既に提案したように)。

<s:iterator value="bar" var="foo">
    <s:if test="#foo==null || #foo==''">0</s:if>
</s:iterator>

変数を使用topしてトップ スタック値を取得することもできますが、オブジェクトの属性と競合する可能性があります。それでも動作します

<s:iterator value="bar">
    <s:if test="top==null || top==''">0</s:if>
</s:iterator>

ただし、 String の結果を、 isnullempty かに関係なく、条件なしで出力するだけでよい場合は、次のように簡単に実行してください。

<s:iterator value="bar">
    <s:property /> <!-- prints iterator current value or '' if its null -->
</s:iterator>

Ps。a の属性、またはa の属性%{}内でognl マークアップを使用する必要はありません。tests:ifvalues:property

その他の例については、struts2 iterator docを確認してください

于 2011-04-15T16:35:57.720 に答える
1

1 行 (単一の if ステートメント) で実行できます。

<s:property value="%{col==null ? '0':col}"/></s:else>

またはさらに文字列を追加します

<s:property value="%{col==null ? '0': 'The column is' + col}"/></s:else>
于 2016-08-08T13:51:20.450 に答える
0

私は自分の問題を解決しました。

<s:if test="%{#col==''}">0 </s:if>

文字列配列の値は null ではなく、空の文字列です。

于 2010-08-20T08:17:02.980 に答える