1

特定の基準が満たされている場合、ViewHandlerを使用して、アクセスされたページ上のすべての入力要素をブロックしています。

これは、「プライマリ」xhtmlファイルの入力要素には最適ですが、複合コンポーネント内の入力要素はブロックされていません。私は、ViewHandlerがその仕事を終えた後にのみ、JSFがこれらのコンポーネントを埋め込むという事実に関係していると考えました。

コンポジットの要素も無効にする方法を知っている人はいますか?

4

1 に答える 1

4

AViewHandlerはその仕事には不適切なツールです。ビューを作成、構築、および復元し、JSF フォームおよびリンクで使用する URL を生成することを目的としています。ビュー内のコンポーネントを操作するためのものではありません。

特定の機能要件については、おそらくSystemEventListeneronPostAddToViewEventが最適です。簡単なテストを行ったところ、コンポジットの入力でも機能します。

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>
于 2013-02-22T18:54:41.743 に答える