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ではないコンポーネントでも値が引き継がれる)になるため、

ユーザの方で明示的な指定が必要としているからです.