[Seasar-user:3948] [S2JSF]forEachで、動的に複数のHTMLをinsertしたい。

cero [E-MAIL ADDRESS DELETED]
2006年 6月 24日 (土) 00:36:14 JST


はじめまして、せろです。

S2JSFで、動的にHTMLファイルを読み込みたいと
考えていますが、上手くいきません。

やりたい事は
- HTMLファイル(パス)のリストを、request, sessionなどで保持しておく。
- リストに含まれるHTMLファイルを、1画面に全て表示する。
- ファイルの数(リストの大きさ)は可変にできる。
です。


forEachタグとinsertタグの組み合わせで出来ると考えて、
まずはinsertタグのm:srcタグに#{ }の式言語を使えるよう、
org.seasar.jsf.processor.InsertProcessorに手を加えました。

org.seasar.jsf.processor.InsertProcessor#getSrc
------------------------------------------------------------
	public String getSrc() {
		String src = getProperty(JsfConstants.SRC_ATTR);

		if (BindingUtil.isValueReference(src)) {
			FacesContext context =
FacesContext.getCurrentInstance();
			Application app = context.getApplication();
			ValueBinding vb = app.createValueBinding(src);
			return (String) vb.getValue(context);
		} else {
			return src;
		}
	}
------------------------------------------------------------


これで式言語は使えるようになりましたが、
forEachと組み合わせた場合、うまく行きません。

現状は以下の通りです。

------------------------------------------------------------
○ : diconに定義した文字列をinsertすると、正しく表示される。
------------------------------------------------------------
  <span m:inject="s:insert" m:src="#{insertStr}"/>

------------------------------------------------------------
○ : insertタグをforEachで繰り返すと、正しく表示される。
------------------------------------------------------------
  <span m:inject="s:forEach" m:items="#{insertList}" m:var="e">
    <span m:inject="s:insert" m:src="/insert/page1.html"/>
  </span>

------------------------------------------------------------
× : diconに定義した文字列のListを、forEachで繰り返すと内容が表示されな
い。
------------------------------------------------------------
  <span m:inject="s:forEach" m:items="#{insertList}" m:var="e">
    <span m:value="#{e}"/>
    <span m:inject="s:insert" m:src="#{e}"/><br/>
  </span>

forEachタグ内では、insertタグのm:src="#{e}"が解釈されないようです。
その前の行に書いた <span m:value="#{e}"/> は、問題なく解釈されます。


こんな現状ですが、
forEachタグ + insertタグの組み合わせで、
insertのsrcを動的に変更する方法はないでしょうか?

また、そもそも、もっと別のアイデアで出来るのでは、、、
などあれば、教えて頂きたいです。


なお、現象を再現させるためのソース一式を添付しています。
S2JSF Example 1.0.14のディレクトリに、上書きコピーしてください。
http://localhost:8080/s2jsf-example/test.html
より動作が確認できます。


[insert_sample.zip]

test.html
 - 表示用HTML

insert/page[1-3].html
 - insertタグによって読み込まれるHTML

WEB-INF/src/exmaples/jsf/dicon/insert.dicon
 - insertするHTMLファイルのパスを記載したdicon

WEB-INF/src/org/seasar/jsf/processor/InsertProcessor.java
 - Insertタグのm:srcに式言語を使えるようにしたもの


以上
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: insert_sample.zip
型:         application/octet-stream
サイズ:     5145 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20060624/033967cd/attachment.obj 


Seasar-user メーリングリストの案内