0

jsp に 2 つの配列リストがあり、1 つの配列リストはサーブレット コンテキストに保存され、もう 1 つは Struts2 の要求に保存されます。

現在、次のように s:merge を使用してそれらをマージしています。

<s:merge id="thirdList">
   <s:param value="#application[@list1]"/>
   <s:param value="#request.list2"/>
</s:merge>

次のコードを使用して、それらがマージされているかどうかを確認しました。

<s:iterator value="thirdList">
   <s:property/>
</s:iterator>

両方の配列リストは POJO のものであるため、これらの POJO への参照が jsp ページに表示されます。

リスト全体をドロップダウンリストに表示したいので、そのために使用しています。

<s:select ...... list="thirdList">
</s:select>

したがって、jsp ページでは、ドロップダウンリストに POJO が表示されます。ここで、POJO 参照の代わりにいくつかの文字列値をドロップダウンに表示したいと考えています。

問題は次のとおりです。list1 は object1 のクラス (POJO) の配列リストであり、list2 は object2 のクラス (POJO) の配列リストであり、それらの異なるプロパティをドロップダウンに表示する必要があります。

たとえば、list1 にはタイプ object1 の 5 つの POJO があり、list2 にはタイプ object2 の 10 の POJO があり、私のドロップダウンには合計 15 のエントリが含まれている必要があります。

これらのプロパティをjspページに表示するには、このコードを使用しました

<s:iterator value="thirdList">
        <s:property value="id_list1"/>
        <s:property value="description_list1"/>
        <s:property value="id_list2"/>
        <s:property value="description_list2"/>
</s:iterator>

リストは正しく印刷されます。現在、s:select タグでは、使用される属性は listKey と listValue です。

<s:select>タグで表示するためにマージされたリストを使用する必要があるためid_list1id_list2description_list1description_list2で使用する必要がある 、 の値は何にする必要がlistKeyありlistValueます。

4

2 に答える 2

0

あなたは正しいアレクサンドルです。ビューレイヤーでこれを行うべきではありません。しかし、s:merge タグの用途は何なのだろうか。

これを解決するために、私がしたことは次のとおりです。

アクション クラスでは、新しい arraylist を作成しました。新しい POJO を作成し、2 つのメンバ変数 int 'id' と string 'value' を持つ POJO t としましょう。

両方の配列リストについて、それらを繰り返し処理し、jsp ページのドロップダウン リストに表示する必要がある ID と説明を新しい POJO t にコピーし、この 't' インスタンスを新しく作成した配列リストに挿入しました。次に、この配列リストをリクエスト オブジェクトに格納しました。

次に、jsp ページの s:select タグで、この新しいリストを繰り返し処理し、listKey と listValue に次を使用しました。

listKey="id" and listValue="value"

そして、これはうまくいきました。

難しい問題の簡単な解決策。

于 2015-02-17T12:19:58.893 に答える
0

まず第一に、この種の作業をビューレイヤーで行わないでください。JSP で表示する必要がある値を保持するオブジェクトを作成し、両方のリストを繰り返して、必要な値を持つこのビューオブジェクトの新しいインスタンスを作成し、それをいくつかのリストに配置する必要があります。次に、JSP でそのビューオブジェクトのリストを反復できます。

そうは言っても...ベストプラクティスのソリューションではなく、ハックに進みます。String-s と-sで構成されるリストで説明します。Integer整数の場合はメソッドを呼び出したいのですがintValue()、String の場合はtoUpperCase()メソッドが呼び出されます。デフォルトでは、存在しないプロパティを呼び出しても比較できる値が生成されないため、ab#attrインスタンス プロパティへの呼び出しを評価するために使用します。

<s:select list="{'teststring', 2, 'somestring', 3}"
   listValue="#attr['top.intValue()'] == null ? top.toUpperCase() : top.intValue()" />

プロパティに null 値がある場合、これは機能しないことに注意してください。

また、ビューでそれをしないでください

于 2015-02-17T11:53:48.940 に答える