SystemEventListener
タイプのすべてのインスタンスを登録し、それらの-EventsUIInput
に反応するカスタムを作成しようとしています。postValidate
Web で見つけた例に基づいて、次HtmlInputText
のように登録することで実行することができました。faces-config.xml
<system-event-listener>
<source-class>javax.faces.component.html.HtmlInputText</source-class>
<system-event-class>javax.faces.event.PostValidateEvent</system-event-class>
<system-event-listener-class>com.ourcompany.ourproduct.validators.inputPostValidationListener</system-event-listener-class>
</system-event-listener>
次に、1)これを拡張して、一般にUIInputsで機能するようにし、2)@ListenerFor
注釈を使用しようとしましたが、どちらも機能しないようです。
1)例やドキュメントが実際に見つからなかったので、a)複数のソースクラスタグを定義するか、b)javax.faces.component.UIInput
ソースクラスとして使用して試してみました。どちらも機能しませんでした。
for 2) やってみました
@ListenerFor(systemEventClass = PostValidateEvent.class, sourceClass = UIInput.class)
UIInput でも html.HtmlInputText でも機能しませんでした。
ここで、他のすべてのタイプの HTML 入力に対して同じ XML 構成を複製すると、これでうまくいきますが、xml が乱雑になるだけで、全体として非常に面倒に思えます。
質問は、一般的に @ListenerFor アノテーションで何か間違ったことをしているのですか? 可能なソースクラスに制限はありますか?つまり、より一般的な UIInput を使用できないのはなぜですか? XML を繰り返すよりも、これらすべての異なる入力に対してリスナーを登録する効率的な方法はありますか? そして最後に、私は実装したいと思いますComponentSystemEventListener
。上記の問題が解決されたと仮定すると、ステートメントを変更して、それに応じimplements
て抽象を実装するだけprocessEvent
ですよね? それはまったく同じように機能しますか、またはこの場合、登録/xml-configが異なります(たとえば<component-system-event-listener>
、単に<system-event-listener>
?
(そして、補足として: それは私だけですか? それとも、この種のものの自明でない例をウェブ上で見つけるのはちょっと難しいですか?)