1

特定のinputTextに検証エラーがある場合、JSFのinputTextフィールドにフォーカスを設定したいと考えています。どうすればこれを実装できますか?

inputText の validatorMessage はすぐにこれを行うと思いましたが、そうではないようです。

4

1 に答える 1

2

そのようなデフォルトの動作はありません。自分で実装するか、サードパーティのライブラリを使用する必要があります。基本的に、レンダリングレスポンス中に、すべてのUIInputコンポーネントの送信済みフォームを調べて、最初にisValid()返されるフォームを見つけ、falseそのクライアントIDをリクエストマップに保存して、JS変数として出力できるようにする必要があります。

form.visitTree(VisitContext.createVisitContext(), new VisitCallback() {

    @Override
    public VisitResult visit(VisitContext context, UIComponent component) {
        if (component instanceof UIInput && !((UIInput) component).isValid()) {
            context.getFacesContext().getExternalContext().getRequestMap()
                .put("focus", component.getClientId(context.getFacesContext()));
            return VisitResult.COMPLETE;
        }

        return VisitResult.ACCEPT;
    }
});

次に、次のスクリプトを使用してフォーカスを設定できます。

<h:outputScript target="body">
    var focus = '#{focus}';

    if (focus) {
        document.getElementById(focus).focus();
    }
</h:outputScript>

JSFユーティリティライブラリOmniFacesには、このための再利用可能なコンポーネントがあります<o:highlight>(ソースコードはこちら、ショーケースデモはこちら)。さらに、無効化された入力にスタイルクラスを設定して、たとえばCSSで別の背景色を指定できるようにします。

于 2012-06-26T12:30:57.173 に答える