当特定 inputText 出现验证错误时,我想将焦点设置在 JSF 中的 inputText 字段上。我该如何实施?
我认为 inputText 上的 validatorMessage 会立即执行此操作,但似乎不是。
当特定 inputText 出现验证错误时,我想将焦点设置在 JSF 中的 inputText 字段上。我该如何实施?
我认为 inputText 上的 validatorMessage 会立即执行此操作,但似乎不是。
没有这样的默认行为。您需要自己实现它或使用 3rd 方库来完成这项工作。基本上,在渲染响应期间,您需要遍历所有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 指定不同的背景颜色。