特定の基準が満たされている場合、ViewHandlerを使用して、アクセスされたページ上のすべての入力要素をブロックしています。
これは、「プライマリ」xhtmlファイルの入力要素には最適ですが、複合コンポーネント内の入力要素はブロックされていません。私は、ViewHandlerがその仕事を終えた後にのみ、JSFがこれらのコンポーネントを埋め込むという事実に関係していると考えました。
コンポジットの要素も無効にする方法を知っている人はいますか?
特定の基準が満たされている場合、ViewHandlerを使用して、アクセスされたページ上のすべての入力要素をブロックしています。
これは、「プライマリ」xhtmlファイルの入力要素には最適ですが、複合コンポーネント内の入力要素はブロックされていません。私は、ViewHandlerがその仕事を終えた後にのみ、JSFがこれらのコンポーネントを埋め込むという事実に関係していると考えました。
コンポジットの要素も無効にする方法を知っている人はいますか?
AViewHandler
はその仕事には不適切なツールです。ビューを作成、構築、および復元し、JSF フォームおよびリンクで使用する URL を生成することを目的としています。ビュー内のコンポーネントを操作するためのものではありません。
特定の機能要件については、おそらくSystemEventListener
onPostAddToViewEvent
が最適です。簡単なテストを行ったところ、コンポジットの入力でも機能します。
public class MyPostAddtoViewEventListener implements SystemEventListener {
@Override
public boolean isListenerForSource(Object source) {
return (source instanceof UIInput);
}
@Override
public void processEvent(SystemEvent event) throws AbortProcessingException {
UIInput input = (UIInput) event.getSource();
if (true) { // Do your check here.
input.getAttributes().put("disabled", true);
}
}
}
実行するには、次のように 内に登録し<application>
ますfaces-config.xml
。
<system-event-listener>
<system-event-listener-class>com.example.MyPostAddtoViewEventListener</system-event-listener-class>
<system-event-class>javax.faces.event.PostAddToViewEvent</system-event-class>
</system-event-listener>