嗨,JSF专家...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:o="http://omnifaces.org/ui">
<h:head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
</h:head>
<h:body>
<h:form>
<o:validateOneOrMore components="one two three" id="validate"/>
<p:message for="validate"/>
<p:inputText id="one" value="#{testBean.valueOne}">
<p:ajax event="change" process="@this" update="@form"/>
</p:inputText>
<p:inputText id="two" value="#{testBean.valueTwo}">
<p:ajax event="change" process="@this" update="two"/>
</p:inputText>
<p:inputText id="three" value="#{testBean.valueThree}">
<p:ajax event="change" process="@this" update="one two validate"/>
</p:inputText>
<p:commandButton process="@form"
update="@form"
value="Submit"
partialSubmit="true"
action="#{testBean.submit}"/>
</h:form>
</h:body>
</html>
一个简单的表单,要求至少填写一个表单,立即重置错误并可按选项卡显示。
但是我没有让它工作,尝试了不同的东西,如您在示例代码中看到的那样。
会发生什么
- 点击提交 - 显示>错误消息:罚款
- 在字段 1 中输入条目并留下选项卡:很好(所有字段不再处于错误状态并且消息消失),但在完成 AJAX 更新后焦点丢失。好的,正如我在这里阅读的那样,JSF 和浏览器的预期行为,但是如何解决?
- 删除所有条目,按输入 -> 字段 3 中的输入并离开字段...什么都没有改变...甚至消息也没有消失。我也不明白,因为我更新了所有字段
有没有解决方案,因为有这样的形式......在每次输入表单验证后(意味着删除此类全局错误)并且仍然可以使用 Tab 键快速使用它?
感谢。
这是一个非常烦人的问题,这与JSF预处理部分渲染的方式有关,有一个关于JSF 2 AJAX焦点问题的深入帖子。
它提供了一个潜在的解决方案,即使用 JSF JavaScript API 来侦听触发的 AJAX 请求并重新聚焦,请查看帖子以获取更多详细信息。