SeamFramework.orgCommunity Documentation
Seam アプリケーションを記述する場合、数多くのアノテーションを使用することになります。 Seam ではアノテーションを使用して宣言的なプログラミングを実現することができます。使用するアノテーションのほとんどは EJB 3.0 仕様で定義されています。データ検証用のアノテーションは Hibernate Validator パッケージで定義されています。そして、 Seam は Seam 独自のアノテーションセットを持っており、これについてはこの章で説明します。
これらのアノテーションはすべてパッケージ org.jboss.seam.annotations
で定義されます。
アノテーションの最初のグループでは Seam コンポーネントを定義することができます。これらのアノテーションはコンポーネントクラスで見られます。
@Name
@Name("componentName")
クラスに対して Seam コンポーネント名を定義します。このアノテーション は Seam の全コンポーネントに必要になります。
@Scope
@Scope(ScopeType.CONVERSATION)
コンポーネントのデフォルトコンテキストを定義します。 可能な値は ScopeType
の列挙、すなわち、 EVENT, PAGE, CONVERSATION, SESSION, BUSINESS_PROCESS, APPLICATION, STATELESS
で定義されます。
スコープが明示的に指定されていない場合、 デフォルトはコンポーネントタイプにより異なってきます。 ステートレスセッション Bean の場合、 デフォルトは STATELESS
になります。 エンティティ bean およびステートフルセッション Bean なら、 デフォルトは CONVERSATION
になり、 JavaBeans のデフォルトは EVENT
になります。
@Role
@Role(name="roleName", scope=ScopeType.SESSION)
Seam コンポーネントを複数のコンテキスト変数に結合できるようにします。 @Name
/@Scope
アノテーションは「デフォルトロール」を定義します。 各 @Role
アノテーションは追加ロールを定義します。
name
— コンテキスト変数名です。
scope
— コンテキスト変数のスコープです。 スコープが明示的に指定されない場合、 デフォルトは上記のとおりコンポーネントタイプにより異なります。
@Roles
@Roles({
@Role(name="user", scope=ScopeType.CONVERSATION),
@Role(name="currentUser", scope=ScopeType.SESSION)
})
複数の追加ロールを指定することができるようになります。
@BypassInterceptors
@BypassInterceptors
特定のコンポーネントまたはメソッドにおける、すべてのインタセプタを無効にします。
@JndiName
@JndiName("my/jndi/name")
Seam が EJB コンポーネントのルックアップに使用する JNDI 名を指定します。 JNDI 名が明示的に指定されない場合、 Seam は org.jboss.seam.core.init.jndiPattern
で指定される JNDI パターンを使用します。
@Conversational
@Conversational
対話スコープのコンポーネントが対話用であることを指定します。つまり長期対話が起こっていない限り、そのコンポーネントのメソッドを呼ぶことができません。
@PerNestedConversation
@PerNestedConversation
対話スコープのコンポーネントのスコープを、そのコンポーネントがインスタンス化された親対話だけに制限します。そのコンポーネントのインスタンスはネストされた子対話からは見えません。子対話は独自のインスタンスを持つことになります。
警告:これはおかしな定義です。なぜならこれは要求サイクルのある部分ではコンポーネントが見え、その後見えなくなるということを意味しています。アプリケーションでこの機能を使うことは推奨しません!
@Startup
@Scope(APPLICATION) @Startup(depends="org.jboss.seam.bpm.jbpm")
アプリケーションスコープのコンポーネントは初期化時に直ちに開始されることを指定します。 主に、 JNDI、 データソースなどの重要なインフラストラクチャをブートストラップする特定の組み込みコンポーネントに使用されます。
@Scope(SESSION) @Startup
セッションスコープのコンポーネントはセッション作成時に直ちに開始されることを指定します。
depends
— インストールされているならば先に開始されるべき名前付きコンポーネントを指定します。
@Install
@Install(false)
コンポーネントがデフォルトでインストールされる必要があるかどうかを指定します。 @Install
アノテーションが無い場合、コンポーネントはインストールが必要であるという意味になります。
@Install(dependencies="org.jboss.seam.bpm.jbpm")
コンポーネントは依存関係としてリストされているコンポーネント群もインストールされる場合にのみインストールされることを指定します。
@Install(genericDependencies=ManagedQueueSender.class)
特定のクラスで実装されたコンポーネントがインストールされている場合にのみ、コンポーネントがインストールされることを指定します。 依存するコンポーネントの名前が不定である場合に便利です。
@Install(classDependencies="org.hibernate.Session")
コンポーネントが、指定されたクラスがクラスパス内にある場合にのみインストールされることを指定します。
@Install(precedence=BUILT_IN)
そのコンポーネントの優先度を指定します。 同じ名前のコンポーネントが複数存在する場合、 より高い優先度を持つコンポーネントがインストールされます。 定義される優先度の値は次のとおりです (昇順) :
BUILT_IN
— すべての組み込みSeamコンポーネントの優先度
FRAMEWORK
— Seamを拡張するフレームワークのコンポーネントを使うための優先度
APPLICATION
— Precedence of application components (the default precedence)
DEPLOYMENT
— 特定のデプロイメントにおいてアプリケーションコンポーネントを上書きするようなコンポーネントを使うための優先度
MOCK
— テスト時に使うモックオブジェクトのための優先度
@Synchronized
@Synchronized(timeout=1000)
コンポーネントが複数のクライアントによって同時にアクセスされること、 Seam は要求をシリアライズすることを指定します。 要求が特定のタイムアウト期間内にコンポーネントでロックを取得できないと例外が発生します。
@ReadOnly
@ReadOnly
JavaBean コンポーネントまたはコンポーネントメソッドが呼び出しの終わりで状態の複製を必要としないことを指定します。
@AutoCreate
@AutoCreate
コンポーネントが自動的に生成されるよう指定します。クライアントが create=true
を指定していなくても生成されます。
次の二つのアノテーションはバイジェクションを制御します。 これらの属性はコンポーネントインスタンス変数またはプロパティのアクセサメソッドに指定できます。
@In
@In
コンポーネントの属性が各コンポーネント呼び出しの開始時にコンテキスト変数からインジェクトされることを指定します。 コンテキスト変数が null の場合、 例外が発生します。
@In(required=false)
コンポーネントの属性が各コンポーネント呼び出しの開始時にコンテキスト変数からインジェクトされることを指定します。 コンテキスト変数は null でも構いません。
@In(create=true)
コンポーネント属性がコンポーネント呼び出しの開始時にコンテキスト変数からインジェクトされることを指定します。コンテキスト変数が null の場合、コンポーネントのインスタンスが Seam によって生成されます。
@In(value="contextVariableName")
アノテーションを付けられたインスタンス変数名を使用せず、 コンテキスト変数名を明示的に指定します。
@In(value="#{customer.addresses['shipping']}")
コンポーネント属性が各コンポーネント呼び出しの開始時に JSF EL 式を評価することでインジェクトされることを指定します。
value
— コンテキスト変数名を指定します。デフォルトはコンポーネント属性の名前です。あるいは #{...}
で囲まれた JSF EL 式を指定します。
create
— コンテキスト変数がすべてのコンテキストで未定義 (null) の場合、 Seam がコンテキスト変数として同じ名前でコンポーネントをインスタンス化するよう指定します。デフォルトは false です。
required
— コンテキスト変数がすべてのコンテキストで未定義の場合、 Seam が例外をスローするよう指定します。
@Out
@Out
Seam コンポーネントであるコンポーネント属性が呼び出しの終わりでそのコンテキスト変数にアウトジェクトされることを指定します。 属性が null の場合、 例外が発生します。
@Out(required=false)
Seam コンポーネントであるコンポーネント属性が呼び出しの終わりでそのコンテキスト変数にアウトジェクトされることを指定します。 属性は null でも構いません。
@Out(scope=ScopeType.SESSION)
Seam コンポーネントタイプではないコンポーネント属性が呼び出しの終わりで特定スコープにアウトジェクトされることを指定します。
明示的にスコープが指定されていない場合、 代わりに @Out
属性を持つコンポーネント自体のスコープが使用されます (またはコンポーネントがステートレスであれば EVENT
) 。
@Out(value="contextVariableName")
アノテーションを付けられたインスタンス変数名を使用せず、 コンテキスト変数名を明示的に指定します。
value
— コンテキスト変数名を指定します。デフォルトはコンポーネント属性の名前です。
required
— アウトジェクトする際にコンポーネント属性が null だった場合、 Seam が例外をスローするよう指定します。
これらのアノテーションは同時に利用されます。 例:
@In(create=true) @Out private User currentUser;
The next annotation supports the manager component pattern; a Seam component manages the lifecycle of an instance of some other class that is to be injected. It appears on a component getter method.
The next annotation supports the factory component pattern; a Seam component is responsible for initializing the value of a context variable. This is especially useful for initializing any state needed for rendering the response to a non-faces request. It appears on a component method.
@Factory
@Factory("processInstance") public void createProcessInstance() { ... }
コンテキスト変数に値がない場合に、 このコンポーネントのメソッドが指定コンテキスト変数の値の初期化に使用されることを指定します。 このスタイルは void
を返すメソッドと併用します。
@Factory("processInstance", scope=CONVERSATION) public ProcessInstance createProcessInstance() { ... }
コンテキスト変数に値がない場合、 Seam が指定コンテキスト変数の値の初期化に使用する値をこのメソッドが返すことを指定します。 このスタイルは値を返すメソッドと併用します。 明示的にスコープが指定されていない場合、 @Factory
メソッドを持つコンポーネント自体のスコープが使用されます (そのコンポーネントがステートレスではない場合。 コンポーネントがステートレスの場合はEVENT
コンテキストが使用されます) 。
value
— コンテキスト変数の名前を指定します。メソッドが getter メソッドの場合、 JavaBeans のプロパティ名がデフォルトになります。
scope
— Seamが戻り値をバインドするスコープを指定します。値を返すファクトリメソッドに取ってのみ、意味があります。
autoCreate
— 変数が要求されたときにはいつもこのファクトリメソッドが自動的に呼ばれるよう指定します。@In
が create=true
を指定していない場合でも呼ばれます。
Log
をインジェクトするアノテーション:
最後のアノテーションは、要求パラメータ値をインジェクトします:
これらのアノテーションにより、 コンポーネントがそのコンポーネント自体のライフサイクルイベントに対して反応することができるようになります。 各コンポーネントクラスごとにそれぞれ一つのアノテーションのみ定義できます。
@Create
@Create
コンポーネントのインスタンスが Seam によってインスタンス化されたときに呼び出されるメソッドを指定します。 create メソッドは JavaBeans およびステートフルセッション Bean に対してしかサポートされないので注意してください。
@Destroy
@Destroy
コンテキストが終了し、そのコンテキスト変数が破棄されるときに呼び出されるメソッドを指定します。 destroy メソッドは JavaBeans およびステートフルセッション Bean に対してしかサポートされないので注意してください。
Destroy メソッドはクリーンアップにのみ使用するようにしてください。 Seam は destroy メソッドから伝播する例外はすべてキャッチしてログを出力し、捨ててしまいます。
@Observer
@Observer("somethingChanged")
指定されたタイプのコンポーネント駆動イベントが発生すると、このメソッドが呼び出されます。
@Observer(value="somethingChanged",create=false)
指定したタイプのイベントが発生したときにそのメソッドが呼ばれるよう指定します。ただしインスタンスが存在しない場合に、それを生成することはしません。インスタンスが存在せず、 create が false の場合、イベントは監視されません。create のデフォルト値は true です。
これらのアノテーションは宣言的対話の境界を設定します。 これらは Seam コンポーネントのメソッド上、通常はアクションリスナーメソッドに付与されます。
すべての Web 要求はそれに関連する対話的コンテキストを持っています。 ほとんどの対話は要求の終了と同時に終了します。 複数の要求にわたる対話が必要であれば、@Begin
を付けたメソッドを呼び出すことで、 長期対話 (long-running conversation) に昇格させなければなりません。
@Begin
@Begin
このメソッドが例外および null 以外の結果 (outcome) を返したら長期対話が開始することを指定します。
@Begin(join=true)
長期対話がすでに開始されている場合、 対話コンテキストが単に伝播されることを指定します。
@Begin(nested=true)
長期対話がすでに開始されている場合、 新たにネストされた対話コンテキストが開始することを指定します。 次の @End
が出現したときにネストされた対話が終了し、外側の対話が再開します。同じ外側の対話において、複数のネストされた対話が同時に存在することは全く問題ありません。
@Begin(pageflow="process definition name")
この対話のためのページフローを定義する jBPM プロセス定義の名前を定義します。
@Begin(flushMode=FlushModeType.MANUAL)
Seam 管理の永続コンテキストのフラッシュモードを指定します。 flushMode=FlushModeType.MANUAL
は アトミックな対話 (atomic conversation) をサポートします。 この場合、 flush ()
(通常、 対話終了時に呼び出される) の明示的な呼び出しが起きるまで、 すべての書き込み操作は対話コンテキスト内にキューイングされます。
join
— 長期対話が既に始まっている場合の動作を指定します。true
ならば、コンテキストが伝播されます。 false
ならば、例外がスローされます。デフォルトは false
です。nested=true
が指定されている場合は、この設定は無視されます。
nested
— 長期対話が既に開始されている場合、ネストした対話が開始されることを指定します。
flushMode
— この対話で作成される Seam 管理の Hibernate セッション、または JPA 永続コンテキストのフラッシュモードをセットします。
pageflow
— org.jboss.seam.bpm.jbpm.pageflowDefinitions
によってデプロイされた jBPM プロセス定義のプロセス定義名です。
@End
@End
このメソッドが例外および null 以外の結果 (outcome) を返す場合、 長期対話が終了することを指定します。
beforeRedirect
— デフォルトでは、リダイレクトが発生するまで、対話は実際には破棄されません。beforeRedirect=true
をセットすることで、現在の要求の最後に対話が破棄され、リダイレクトは新しい一時的な対話コンテキストで実行されるよう指定します。
root
— デフォルトでは、ネストした対話が終了すると対話のスタックを単純にポップして、外側の対話を再開します。root=true
をセットすることで 、ルート対話が破棄され、結果的に対話スタック全体が破棄されるよう指定します。対話がネストしていなければ単純に現在の対話が終了します。
@StartTask
@StartTask
jBPM タスクを「開始」します。 このメソッドが例外および null 以外の結果 (outcome) を返すとき、 長期対話を開始することを指定します。 この対話は指定の要求パラメータ中で指定される jBPM タスクと関連しています。 この対話のコンテキスト内で、 タスクインスタンスのビジネスプロセスインスタンスに対して、 ビジネスプロセスコンテキストも定義されます。
The jBPM TaskInstance
will be available in a request context variable named taskInstance
. The jBPM ProcessInstance
will be available in a request context variable named processInstance
. (Of course, these objects are available for injection via @In
.)
taskIdParameter
— タスクのIDを持つ要求パラメータの名前です。デフォルトは "taskId"
です。これは Seam taskList
JSF コンポーネントでもデフォルトとして使用されています。
flushMode
— この対話で作成される Seam 管理の Hibernate セッション、または JPA 永続コンテキストのフラッシュモードをセットします。
@BeginTask
@BeginTask
完了していない jBPM タスクの処理を再開します。 このメソッドが例外および null 以外の結果 (outcome) を返すとき、 長期対話が開始することを指定します。 この対話は指定の要求パラメータ中で指定される jBPM タスクと関連しています。 この対話のコンテキスト内で、 タスクインスタンスのビジネスプロセスインスタンスに対して、 ビジネスプロセスコンテキストも定義されます。
The jBPM org.jbpm.taskmgmt.exe.TaskInstance
will be available in a request context variable named taskInstance
. The jBPM org.jbpm.graph.exe.ProcessInstance
will be available in a request context variable named processInstance
.
taskIdParameter
— タスクのIDを持つ要求パラメータの名前です。デフォルトは "taskId"
です。これは Seam taskList
JSF コンポーネントでもデフォルトとして使用されています。
flushMode
— この対話で作成される Seam 管理の Hibernate セッション、または JPA 永続コンテキストのフラッシュモードをセットします。
@EndTask
@EndTask
jBPM タスクを「終了」します。 このメソッドが null 以外の結果 (outcome) を返すとき、 長期対話は終了し、 現在のタスクが完了することを指定します。 jBPM 遷移を引き起こします。 アプリケーションが transition
と呼ばれる組み込みコンポーネントの Transition.setName ()
を呼んでいない限り、 引き起こされる実際の遷移はデフォルトの遷移になります。
@EndTask(transition="transitionName")
指定された jBPM 遷移を引き起こします。
transition
— タスクが終了するときに引き起こされる jBPM 遷移の名前です。 省略された場合はデフォルト遷移となります。
beforeRedirect
— デフォルトでは、リダイレクトが発生するまで、対話は実際には破棄されません。beforeRedirect=true
をセットすることで、現在の要求の最後に対話が破棄され、リダイレクトは新しい一時的な対話コンテキストで実行されるよう指定します。
@CreateProcess
@CreateProcess(definition="process definition name")
メソッドが例外なしに null 以外の結果 (outcome) を返すとき、 新しい jBPM プロセスインスタンスを作成します。 ProcessInstance
オブジェクトは processInstance
というコンテキスト変数として使用できます。
definition
— org.jboss.seam.bpm.jbpm.processDefinitions
によってデプロイされる jBPM プロセス定義の名前です。
@ResumeProcess
@ResumeProcess(processIdParameter="processId")
メソッドが例外または null 以外の結果 (outcome) を返すとき、 既存の jBPM プロセスインスタンスのスコープに再度入ります。 ProcessInstance
オブジェクトは processInstance
というコンテキスト変数で使用できます。
processIdParameter
— プロセス ID を持つ要求パラメータ名です。デフォルトは "processId"
です。
@Transition
@Transition("cancel")
メソッドが null 以外の結果を返すときはいつも、現在の jBPM プロセスインスタンス内で遷移にシグナルを送るように、メソッドをマークします。
Seam は特定のアクションリスナーの結果 (outcome) に対して JTA トランザクションのロールバックを強制するアノテーションを提供します。
@Transactional
@Transactional
JavaBean コンポーネントにセッション Bean コンポーネントのデフォルト動作と同じようなトランザクション動作を持たせることを指定します。 例えば、 メソッド呼び出しはトランザクション内で起こるべきであり、 メソッドが呼び出されたときにトランザクションが存在しない場合は、 トランザクションがそのメソッドのためだけに開始されます。 このアノテーションはクラスレベルでもメソッドレベルでも適用可能です。
EJB 3.0 コンポーネントではこのアノテーションを使わずに、 @TransactionAttribute
を使ってください!
@ApplicationException
@ApplicationException
javax.ejb.ApplicationException と同義で、Java EE 5 より前の環境で使用されます。例外に対して適用され、それがアプリケーション例外であり、クライアントに直接(つまりラップせずに)伝えられるべきであるということを指定します。
EJB 3.0 コンポーネントではこのアノテーションを使わずに、@javax.ejb.ApplicationException
を代わりに使ってください。
rollback
— デフォルトでは false
です。true
の場合、この例外はトランザクションを rollback only にセットします。
end
— デフォルトでは false
です。true
の場合、この例外は現在の長期対話を終了します。
@Interceptors
@Interceptors({DVDInterceptor, CDInterceptor})
javax.interceptors.Interceptors と同義で、Java EE 5 より前の環境で使用されます。これはメタアノテーションとしてのみ使用できることに注意してください。クラスまたはメソッドに対して、インタセプタの順序付けられたリストを宣言します。
EJB 3.0 コンポーネントではこのアノテーションを使わずに、@javax.interceptor.Interceptors
を代わりに使ってください。
これらのアノテーションは主に JavaBean Seam コンポーネントに対して有用です。EJB 3.0 コンポーネントを使う場合は、標準 Java EE5 アノテーションを使うべきです。
これらのアノテーションにより Seam コンポーネントから伝播する例外を処理する方法を指定することができます。
@Redirect
@Redirect(viewId="error.jsp")
このアノテーション付いている例外は、指定されたビュー ID にブラウザをリダイレクトします。
viewId
— リダイレクトする JSF ビュー ID です。ここで EL も利用可能です。
message
— 表示するメッセージです。 デフォルトはその例外のメッセージです。
end
— 長期対話が終了するよう指定します。 デフォルトは false
です。
@HttpError
@HttpError(errorCode=404)
このアノテーションが付いている例外は、 HTTP エラーが送信されます。
errorCode
— HTTP エラーコードです。 デフォルトは 500
です。
message
— HTTP エラーで送信されるメッセージです。 デフォルトはその例外のメッセージです。
end
— 長期対話が終了するよう指定します。 デフォルトは false
です。
Seam Remotingは、以下のアノテーションを付けた セッション Bean のローカルインタフェースが必要です。
@WebRemote
@WebRemote(exclude="path.to.exclude")
Indicates that the annotated method may be called from client-side JavaScript. The exclude
property is optional and allows objects to be excluded from the result's object graph (see the 章 25. リモーティング chapter for more details).
以下のアノテーションは、Seam インタセプタクラスで使われます。
EJB インタセプタ定義に必要なアノテーションに関する詳細は EJB 3.0 仕様のドキュメントを参照してください。
@Interceptor
@Interceptor(stateless=true)
このインタセプタはステートレスであることを指定するので、 Seam は複製処理を最適化することができます。
@Interceptor(type=CLIENT)
このインタセプタは EJB コンテナより前に呼ばれる「クライアントサイド」インタセプタであることを指定します。
@Interceptor(around={SomeInterceptor.class, OtherInterceptor.class})
このインタセプタは特定のインタセプタよりスタック内でより高い位置に配置されることを指定します。
@Interceptor(within={SomeInterceptor.class, OtherInterceptor.class})
このインタセプタは特定のインタセプタよりスタック内でより深い位置に配置されることを指定します。
次のアノテーションは非同期メソッドの宣言に使用されます。 例:
@Asynchronous public void scheduleAlert(Alert alert, @Expiration Date date) { ... }
@Asynchronous public Timer scheduleAlerts(Alert alert,
@Expiration Date date,
@IntervalDuration long interval) { ... }
@Asynchronous
@Asynchronous
メソッド呼び出しが非同期で処理されることを指定します。
@Duration
@Duration
非同期呼び出しのパラメータが、 その呼び出しが処理されるまでの期間であることを指定します (または反復呼び出しの場合は初めての処理が行われるまで) 。
@Expiration
@Expiration
非同期呼び出しのパラメータが、 その呼び出しが処理される (または反復呼び出しの場合は初めての処理が行われる) 日付と時刻であることを指定します。
@IntervalDuration
@IntervalDuration
このアノテーションが付いている反復呼び出しを行う非同期メソッド呼び出しのパラメータが、 各反復呼び出し間の期間であることを指定します。
以下のアノテーションで JSF をより簡単に使えるようになります。
@Converter
Seam コンポーネントを JSF コンバータとして振る舞えるようにします。アノテーションを付けられたクラスは Seam コンポーネントでなければいけません。また javax.faces.convert.Converter
を実装しなければなりません。
id
— JSF コンバータIDです。デフォルトはコンポーネント名です。
forClass
— 指定されていれば、このコンポーネントをある型のデフォルトコンバータとして登録します。
@Validator
Seam コンポーネントを JSF バリデータとして振る舞えるようにします。アノテーションを付けられたクラスは Seam コンポーネントでなければいけません。また javax.faces.validator.Validator
を実装しなければなりません。
id
— JSF バリデータIDです。デフォルトはコンポーネント名です。
以下のアノテーションはステートフルセッション Bean を使ったクリック可能リストの実装を容易にします。 これらのアノテーションは属性に付与されます。
@DataModel
@DataModel("variableName")
List
, Map
, Set
または Object[]
型のプロパティを JSF DataModel
として、所有しているコンポーネントのスコープへアウトジェクトします(所有しているコンポーネントが STATELESS
の場合は EVENT
スコープ)。Map
の場合、DataModel
の各行は Map.Entry
です。
value
— 対話コンテキスト変数の名前です。デフォルトは属性の名前です。
scope
— scope=ScopeType.PAGE
が明示的に指定されていれば、DataModel
は PAGE
コンテキストに保持されます。
@DataModelSelection
@DataModelSelection
JSF DataModel
から選択された値をインジェクトします(これは DataModel の Collection の要素、または Map の値です)。コンポーネントにひとつしか @DataModel
属性が定義されていなければ、その DataModel
から選択された値がインジェクトされます。そうでなければ、各 @DataModel
のコンポーネント名を、各 @DataModelSelection
の value 属性に指定しなければいけません。
関連付けられた @DataModel
に PAGE
スコープが指定されている場合、 DataModel Selection がインジェクトされるのに加え、関連付けられた DataModel もインジェクトされます。このとき、@DataModel
でアノテーションを付けられたプロパティが getter メソッドだった場合、プロパティの setter メソッドも Seam コンポーネントのビジネスAPIでなければいけません。
value
— 対話コンテキスト変数の名前です。コンポーネントに一つの @DataModel
しかない場合は不要です。
@DataModelSelectionIndex
@DataModelSelectionIndex
JSF DataModel
の選択されたインデックスをコンポーネントの属性として公開します(これは DataModel の Collection の行番号、または Map のキーです)。コンポーネントにひとつしか @DataModel
属性が定義されていなければ、その DataModel
から選択された値がインジェクトされます。そうでなければ、各 @DataModel
のコンポーネント名を、各 @DataModelSelectionIndex
の value 属性に指定しなければいけません。
value
— 対話コンテキスト変数の名前です。コンポーネントに一つの @DataModel
しかない場合は不要です。
これらのメタアノテーションは、リスト以外のデータ構造に対して @DataModel
や @DataModelSelection
と同様の機能の実装を可能にします。
このアノテーションは、 一緒にパッケージングするコンポーネントセットに関する情報を宣言するメカニズムを提供します。 どの Java パッケージに対しても適用できます。
@Namespace
@Namespace(value="http://jboss.com/products/seam/example/seampay")
現在のパッケージにあるコンポーネントが特定の名前空間に関連付けられることを指定します。 宣言された名前空間は components.xml
ファイル内で XML 名前空間として使用することでアプリケーションの設定を単純化することができます。
@Namespace(value="http://jboss.com/products/seam/core", prefix="org.jboss.seam.core")
名前空間を特定のパッケージに関連付けるよう指定します。 また、 XML ファイル内で指定されたコンポーネント名にプレフィックスを適用するよう指定します。 たとえば、 この名前空間に関連付けられる init
という XML 要素は実際には org.jboss.seam.core.init
というコンポーネントを参照するように解釈されます。
これらのアノテーションは Seam コンポーネントをサーブレットコンテナに統合することができます。
@Filter
@Filter
でアノテーションを付けられた Seam コンポーネント (javax.servlet.Filter
を実装している) をサーブレットフィルタとして使います。Seam のマスタフィルタから実行されます。
@Filter(around={"seamComponent", "otherSeamComponent"})
このフィルタは特定のフィルタよりスタック内でより高い位置に配置されることを指定します。
@Filter(within={"seamComponent", "otherSeamComponent"})
このフィルタは特定のフィルタよりスタック内でより深い位置に配置されることを指定します。