JSTL if等しい文字列のタグ


90

JSPページのオブジェクトから変数を取得しました。

<%= ansokanInfo.getPSystem() %>

変数の値は正しいNATであり、この値に特定のページ要素を適用したいと思います。タグを使用してケースを知るにはどうすればよいですか?私は何かを試しました

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">      
   process  
</c:if> 

しかし、上記は何も表示しません。どうすればよいですか?または、スクリプトレットを使用することもできます。

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>

回答やコメントをありがとう。


1
あなたは手の込んだしてくださいすることができますgetPSystem()ansokanInfo?あなたはそれらをリクエストに設定するimportか、それを通してそれらにアクセスしますか?
Santhosh 2014年

1
IIRC私はリクエストでそれらを設定し、解決策(回避策)はBalusCの指示に従ってwebsphereをアップグレードすることでした。その後、新しいバージョンはタグによってBeanメソッドを呼び出すことができます。私は質問で標準のwebsphereを使用しており、jspとjstlがメソッドを実行できるようになる前のバージョンを使用していました。BalusCがメソッドを呼び出すために新しいバージョンを必要とするwebsphereバージョンを使用していたと私に言っている私の別の質問を見つけください。
Niklas R.

1
アプリサーバーを8にアップグレードしましたか?そしてその解決策は失敗しますか?
Santhosh 2014年

@SanKrish私は現在JSPを使用していません。私はそれがあなたのために働き、アプリサーバーの新しいバージョンのために更新されたことを望みます。
Niklas R.

回答:


145

試してください:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

JSP /サーブレット2.4(バージョン番号だと思います)は、ELでのメソッド呼び出しをサポートせず、プロパティのみをサポートします。最新のサーブレットコンテナはメソッド呼び出しをサポートしています(つまり、Tomcat 7)。


1
Jornの回答に基づいて回答を更新しました。彼への帽子の先端。
アダム・ゲント

3
JSP(X)をあきらめました。Mustache(github.com/samskivert/jmustache)または自分のテンプレート言語JATL(code.google.com/p/jatl)を使用しています。
アダム・ゲント

1
複数の文字列をどのように使用しますか?そこは、より良い方法があるはずだ<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
ディロン


16

他の回答は、EL式で使用するプロパティ名に関する1つの重要な詳細を欠いていると思います。メソッド名からプロパティ名に変換するためのルールは、Java Bean標準の一部である'Introspector.decpitalize`で指定されています。

これは通常、最初の文字を大文字から小文字に変換することを意味しますが、(異常な)特殊なケースでは、複数の文字があり、最初の文字と2番目の文字の両方が大文字である場合、そのままにします。

したがって、「FooBah」は「fooBah」になり、「X」は「x」になりますが、「URL」は「URL」のままです。

したがって、あなたの場合、JSTLコードは次のようになります。大文字の「P」に注意してください。

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

2
命名規則を伴うゲッターとセッターは、ほとんどJava Beanの定義です。変数がjspに渡される場所に関するいくつかの詳細情報が必要だと思います。ELで使用できるようにするには、それを、たとえばリクエスト属性またはpageContext属性として、あるスコープに含める必要があります。スクリプトブロックによって作成されたローカル変数は、ELでは使用できません。
ジョーンHorstmann

5

スクリプトレットを使用できますが、これは方法ではありません。現在、JSPファイル内のインラインスクリプトレットまたはJAVAコードは、悪い習慣と見なされています。

JSTLについてもう少し読んでください。ansokanInfoオブジェクトがリクエストスコープまたはセッションスコープ内にある場合、オブジェクト(toString()メソッド)を次のように出力すると、$ {ansokanInfo}によって基本情報が得られます。$ {ansokanInfo.pSystem}はオブジェクトのゲッターメソッドを呼び出す必要があります。これがすべて機能する場合、これを使用できます:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.