将焦点设置为有关验证错误的inputText

时间:2012-06-26 10:42:35

标签: javascript validation jsf focus

我希望在特定inputText上存在验证错误时将注意力集中在JSF中的inputText字段。我该如何实现呢?

我认为inputText上的validatorMessage可以开箱即用,但看起来不是。

1 个答案:

答案 0 :(得分:1)

没有此类默认行为。您需要自己实现它或使用第三方库来完成工作。基本上,在渲染响应期间,您需要遍历所有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>(源代码here和showcase demo here)。它还在无效输入上设置样式表,以便您可以通过CSS指定不同的背景颜色。