web-dev-qa-db-ja.com

EL式言語で2つのオブジェクト変数を比較する方法は?

すべての言語のドロップダウンリストを作成しています。リストのデフォルトの言語選択は、ユーザーが追加した情報によって決定されます。

<select>
    <c:forEach items="${languages}" var="lang">
        <c:choose>
            <c:when test="${lang}.equals(${pageLang})">
                <option value="${lang}" selected>${lang}</option>
            </c:when>
            <c:otherwise>
                <option value="${lang}">${lang}</option>
            </c:otherwise>
        </c:choose>
    </c:forEach>
</select>

.equalsはELに存在しないようです。ここを見て、独自の関数を作成し、それをインポートして使用することをお勧めします。これはこのページのためだけの小さなことなので、このためだけにライブラリなどの作成を開始する必要はありません。また、この追加情報をサーブレットに返すための特別なオブジェクトの作成を開始したくありません。

私ができると思うことは、言語文字列だけでなく、サーブレットからオプション行全体の実際のhtmlを返すことだけですが、それは見苦しいので、よりエレガントなソリューションがあることを望んでいます。

ELの2つの文字列を比較するための迅速な修正のための最良の計画は何ですか?

J2EE 1.4チュートリアル

44
Caroline

Expression Language では、_==_またはeq演算子を使用してオブジェクト値を比較できます。舞台裏では、実際にObject#equals()を使用します。これは、現在のEL 2.1バージョンまでは、標準のゲッター(およびセッター)メソッド以外のシグネチャでメソッドを呼び出すことができないためです(今後のEL 2.2では可能になります)。

だから特定の行

_<c:when test="${lang}.equals(${pageLang})">
_

(式全体が_{_および_}_内にあることに注意してください)

_<c:when test="${lang == pageLang}">
_

または、同等に

_<c:when test="${lang eq pageLang}">
_

両方とも、おおよそ次のように解釈されます

_jspContext.findAttribute("lang").equals(jspContext.findAttribute("pageLang"))
_

定数String値を比較する場合は、引用符で囲む必要があります

_<c:when test="${lang == 'en'}">
_

または、同等に

_<c:when test="${lang eq 'en'}">
_

おおよそ次のように解釈される舞台裏

_jspContext.findAttribute("lang").equals("en")
_
103
BalusC

あなたが正しいかどうかはわかりませんが、最も簡単な方法は次のようなものです:

<c:if test="${languageBean.locale == 'en'">
  <f:selectItems value="#{customerBean.selectableCommands_limited_en}" />
</c:if>

私のアプリから簡単にコピーして貼り付ける...

HTH

3
KB22