6

私はこのようなことをしたい:

<c:if test="${somestring.charAt(0)=='1'}">
tadaaaam
</c:if>

一部の文字列が「11011」であるが機能しない場合。で印刷できます

${somestring.charAt(0)}

それは「1」ですが、上記の比較は失敗します。次の比較:

if(somestring.charAt(0)=='1')

純粋な Java での worx (条件が true)。

何か案は?

4

2 に答える 2

8

ELはcharに問題があるようです。これが私がそれを機能させる唯一の方法です。

<c:if test="${somestring.charAt(0)  == '1'.charAt(0)}" >
     tadaaaam
</c:if>
于 2012-05-11T04:59:25.483 に答える
7

動作は期待どおりであり、EL 仕様で要求されています。EL 仕様のバージョン 2.2 を使用する場合は、'==' 演算子のルールを提供するセクション 1.8.2 を確認する必要があります。

この場合のオペランドはsomestring.charAt(0)、どれが acharで、'1'どれがString(文字ではありません) です。これは、EL では文字列が一重引用符または二重引用符で区切られている可能性があるためです。

Character == String があるとすると、1.8.2 の 6 番目の箇条書きが適用され、両方とも Long 値に強制されます。文字は 49 (1 の ASCII コード) に強制され、1 は 1 に強制されます。これらは等しくないため、表示される結果が表示されます。

これはあなたが期待するものではないことを理解していますが、これは仕様で要求されている動作であり、EL の一重引用符が文字ではなく文字列を区切るという事実によって引き起こされます。

于 2012-05-11T07:27:19.667 に答える