Teedaのデフォルトスコープについて
Teedaはデフォルトで同じサブアプリケーション内で同一プロパティ名ならば、
値を引き継ぐ機能があります.
これは非常に便利な機能で、サブアプリケーションスコープの機能の一つですが、
私の説明が悪かったのか@SubapplicationScopeと同じものだという誤解を招いていたようです.
Teedaのデフォルトのスコープでは、確かに同一プロパティであれば引き継ぐ機能が
ありますが、それは通常のWebアプリ同様input属性のもののみです.
例えば下記のようにspanのコンポーネントが値を持っていたとしましょう.
<span id="hoge">dummy</span>
このコンポーネントはinputコンポーネントではないため、デフォルトのスコープでは値は引き継がれません.
(JSF言葉で言えば、リクエストにのってこないのでUIコンポーネントにdecodeされない.)
引き継ぐにはどうすれば良いのでしょうか.お察しのとおり、hiddenで値を持たせて引き継ぐようにしてください.
<span id="hoge">dummy</span> <input type="hidden" id="hoge-hidden" />
これでデフォルトスコープでも引き継がれるようになります.
では、明示的に@SubapplicationScopeとつけた場合は何が違うのでしょうか.
public class HogePage { @SubapplicationScope private String hoge; }
<span id="hoge">dummy</span>
この場合はspanでも値は引き継がれるようになります.
@SubapplicationScopeをつけた場合、そのプロパティは次のページへリダイレクトして
Pageの状態をセットアップしている最中に復元されるようになります.
同一サブアプリケーション内から出ると、SubapplicationScopeの管理領域から削除されます.
どうしてこのようにしているのかと言うと、@SubapplicationScopeは通常のWebアプリからすると
若干違うキモい動き(spanなどのinputではないコンポーネントでも値が引き継がれる)になるため、
ユーザの方で明示的な指定が必要としているからです.