2011-12-26 16 views
0

テーブル、画像、プロットなどの複雑なオブジェクトのリストを1つのページにレンダリングしたいとします。各要素は、独自のブロック(たとえば<div>)に存在します。このような複雑なオブジェクトにはいくつかの種類がありますので、レンダリングロジックを1か所に実装するのではなく、何らかの方法でモジュール化します(オブジェクトの種類ごとに別々のコードとJSPを準備する別のコード)。私はこれをできる最善の方法は何ですか?struts2:動的ブロックページ構造

私自身が<s:action>タグを使用するつもりでした。だから私は私のリストを反復処理し、いくつかの条件に基づいてアクションを呼び出すことができます:

明らか
<s:iterator value="objectList" var="element"> 
     <s:if test="#element.type == 'TABLE'"> 
      <s:action name="renderTable"><s:param name="elementValue" value="#element.value"/></s:action> 
     </s:if> 
     ... 
</s:iterator> 

表やグラフや私がアクションをレンダリングにデータを渡す必要があり、他の要素をレンダリングするために - あなたは、私がしようとしている見ることができますentriesを私のrenderTableに渡してください。 Strutsはこのパラメータを文字列の配列にキャストし、私のアクションでsetElementValue(String[])を見つけようとします。だから私は例外を取得:

java.lang.NoSuchMethodException: edu.stackoverflow.RenderTable.setElementValue([Ljava.lang.String;) 

私はorg.apache.struts2.components.ActionComponentの実装は、このような方法でパラメータを処理する理由はわかりません、ここではクラスからのコードは次のとおりです。

for (Iterator i = parameters.entrySet().iterator(); i.hasNext();) { 
     Map.Entry entry = (Map.Entry) i.next(); 
     String key = (String) entry.getKey(); 
     Object val = entry.getValue(); 
     if (val.getClass().isArray() && String.class == val.getClass().getComponentType()) { 
      params.put(key, (String[])val); 
     } else { 
      params.put(key, new String[]{val.toString()}); 
     } 
    } 

ので、アプローチが不可能になります。

代替手段はありますか?

答えて

2

なぜ通常のJSPベースのカスタムタグを使用しないのですか?

また、テンプレートベースのコンポーネントを作成することもできます。

+0

私はこれらのアプローチに慣れていません。どちらが最もシンプルですか? –

+0

私のレンダリングコードでもDIを使っていくつかの依存関係を提供する必要があるので、おそらくこれはJSPタグでは難しいでしょう。 –

+0

@pavel_kazlouに依存します。値スタックは、カスタムタグ、コンポーネント、アクションタグのいずれを使用していても、依頼全体を通じて引き続き利用できます。これは、値にアクセスするためのさまざまな方法を提供します。これには、値をプッシュすること( ''など)が含まれます。 –

1

私は、テンプレートベースのコンポーネントの代わりに、jspでカスタムタグを作成することが最善の方法だと考えています。

カスタムUIコンポーネントを作成することもできます。

creating_a_ui_component

+0

レンダリングインスタンス(タグ、コンポーネント、アクションなど)に依存関係を渡す必要がある場合はどうすればよいですか? JSPタグやUIコンポーネントを作成し、それをSpring内で使用して依存関係を注入することはできますか? –

+0

私はそれを使用していませんが、アクションを使用するとthat.sayに何の問題も見られないので、Springにあなたのアクションを作成し、依存関係を渡すように頼むことができます。 –

関連する問題