45

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

<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>

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

私が考えられる唯一のことは、言語文字列だけでなく、サーブレットからオプション行全体の実際の html を返すことですが、それは醜いので、もっとエレガントな解決策があることを願っています。

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

J2EE 1.4 チュートリアル

4

2 に答える 2

106

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

${...}また、式全体が同じスコープ内に配置されていることを確認する必要があります。それ以外のものは、EL 式の一部として解釈されません。

したがって、特定の行

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

のように書く必要があります (式全体が{andの中にあることに注意してください})

<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")
于 2009-12-14T13:23:01.193 に答える
3

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

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

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

HTH

于 2009-12-14T13:17:24.017 に答える