[Seasar-user:15486] Re: [Teeda]Treeコンポーネントの状態維持
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2008年 8月 24日 (日) 03:00:03 JST
小林 (koichik) です.
Date: Sat, 23 Aug 2008 18:10:48 +0900
From: "Tetsuya Anzawa" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:15484] [Teeda]Treeコンポーネントの状態維持
> Treeコンポーネントの状態維持で困っております。
> ツリーを操作(フォルダを開いたり、閉じたり)したタイミングでサブミットすることってできないでしょうか?
ツリーを操作する度サブミットするのは JavaScript を
使うツリーを使う必要がなくなってしまうような.
> 具体的に困っているのは、
> Teedaレイアウト機能を用いた「サイドメニュー(Treeコンポーネント使用)」+「メイン画面」で構成される
> WEBアプリにて、サイドメニューのツリーを操作(フォルダを開いたり、閉じたり)した後に、メイン画面を
> 操作すると、サイドメニューのツリーの状態が維持されないというものです。
> ツリーを操作した時点で状態が維持されるような方法があればと・・。
tree を含むメニューとメイン画面が異なった
<form> だと,メイン画面をサブミットした際に
tree の状態を維持するのは絶望的な感じです.
tree を使うのであれば,レイアウトでメニューを
<te:include> するのではなく,メイン画面の
<form> の内側でメニューを <te:include> する
くらいしか自分は思いつきませんでした.
・メイン画面の HTML
<form id="form">
<te:include id="menu" te:src="/layout/menu.html"/>
...
・menu.html
<input type="hidden" id="treeTreeSave" />
<te:tree value="#{layout_menuPage.tree}" id="client-tree" var="node" varNodeToggler="t">
...
・MenuPage
public class MenuPage {
public TreeNode tree;
public void initialize() {
if (tree != null) {
return null;
}
tree = new TreeNodeImpl(...);
...
}
}
メイン画面に対応するページクラスと異なり,
ポストバックでも initialize() が呼ばれるので
注意が必要です.
この方法でも,メイン画面に複数の <form> を
持つ画面の場合,メニューをインクルードした
<form> 以外をサブミットすると tree の状態が
失われます.
それが許容できない場合は,Teeda の tree を
使うよりも,JavaScript ライブラリのツリーを
使う方がいいように思います.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内