[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 メーリングリストの案内