2010-11-23 7 views
5

私は、Java Expression Languageタグを使用できるようにするプロジェクトのフロントエンドに取り組んでいます。 1つのインスタンスでは、配列が返されているのか、1ビットのデータしか返されていないのかを確認する必要があり、どのように処理するのかわかりません。ページ上のJava表現言語を扱う

例:

<p>Acme</p> 

問題は、その建物の中でより多くがある場合、私はより多くの出力に必要であるビット:

ページが出力何かのようになります

<p>${WebAppContext.buildings[0].location.name}</p> 

を持っています

擬似コードのようなもの:

if isArray(${WebAppContext.buildings}){ 
foreach(${WebAppContext.buildings} as foo){ 
    //iterate over whatever is in the array 
} 
} 

ので、私のような何かを出力することができます:

<p>${WebAppContext.buildings[0].location.name}</p> 
<p>${WebAppContext.buildings[1].location.name}</p> 

私はこのコードを生成するための責任のJava人々を尋ね、彼らは言った、「Dunnokindofbusyrightnowbuhbyeを。」私は皆さんにある程度の洞察があることを願っています。

ページにコードを貼り付ける以外に、私はこのJava表現言語(どのようにそれが呼び出されているかを見るためにそれを調べなければならなかった)をどのように扱うかを手がかりにしません。ですから、どんなアドバイス/リソースも役に立つでしょう。


EDIT:ページのソースで

<c:forEach var='building' items='${WebAppContext.buildings}'> 
    <p>${building.location.name}</p> 
</c:forEach> 

それだけを示しています:

<c:forEach var='meeting' items='[Lorg.foo.bar.baz.bat.serviceapi.webserviceobject.xsd.BuildingsWSO;@3823ff8'> 
    <p></p> 
</c:forEach> 
私は、次のと何も結果を得ていないのです試した

私は、Java表現言語について何も知らないことを認めます私はそれが私たちが使用するセットアップのパスをたどることがわかりますが、items = ''が変換される理由を理解できません。 は、今、私が使用している場合:

<p>${WebAppContext.buildings[0].location.name}</p> 
<p>${WebAppContext.buildings[1].location.name}</p> 

は私が手:

<p>Krustylu Studios</p> 
<p>Springfield Nuclear Power Plant</p> 
+0

http://download.oracle.com/javaee/5/tutorial/doc/bnake.html – McDowell

+0

あなたが本当に使用することはできません:

public static boolean isArray(final Object o) { return o instanceof Object[]; } 

は、それからちょうどのようなTLDでそれをマッピングJSTLのようなtaglibs?あなたはJSPで作業していますよね? – BalusC

+0

@BalusC:下記のforEachの提案を試してみるときに私が得意とすることを示すために質問を更新しました。 – Stuart

答えて

4

私はELによってサポートされている高度な機能のようなものを考えていません。 JSTL c:forEachタグを使用してリストを反復処理することができます。

+0

OK、使えないようです...私はJSONのような形式でデータを取得することを主張します。 – Stuart

+1

@ gaoshan88ページでJSTL/ELを使用できるのであれば、確かに ''を使用することができます。 – Pointy

2

これが可能でなければなりません:今すぐ

<c:forEach var='building' items='${WebAppContext.buildings}'> 
    <p>${building.location.name}</p> 
</c:forEach> 

、どのようにWebAppContext.buildingsが実際に配列されているかどうかをチェックしますか?には、JSTLから使用するローカルのカスタムEL機能を拡張する能力と能力がなければ、JSTL で簡単に行うことはできません。

+0

これを試してみると、私の質問が更新されます。 – Stuart

+0

@Stephen Pの答えを見てください - あなたはページが標準のタグライブラリを引っ張っていない – Pointy

3

ブラウザからページソースを表示するときに<c:forEach var='meeting' items='[Lorg.foo.bar.baz.bat.serviceapi.webserviceobject.xsd.BuildingsWSO;@3823ff8'>が表示された場合は、<c:forEach>タグが処理されていないことを意味します。

あなたはJSPページ内のタグライブラリを宣言していることを確認してください:あなたは<c:forEach>c:一部を取得する場所

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

prefix="c"あなたはprefix="foo"を言っていた場合、タグは次のようになり...です<foo:forEach>

1

オブジェクトが配列であるかどうかを本当に知る必要がある場合は、カスタムJSP関数を作成できます。

<function> 
    <description> 
     Checks if the supplied object is an array. 
    </description> 
    <name>isArray</name> 
    <function-class>com.example.JspFunctions</function-class> 
    <function-signature>boolean isArray(java.lang.Object)</function-signature> 
    <example> 
     ${f:isArray(someVar)} 
    </example> 
</function> 
関連する問題