当特定 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 指定不同的背景颜色。