使用AJAX验证的JSF表单 - 焦点问题

时间:2013-10-11 18:00:05

标签: ajax jsf primefaces focus omnifaces

你好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>

一个简单的表单,要求至少填写一个表单,立即重置错误并可以制表。

但是我没有得到它的功能,尝试了不同的东西,你可以在示例代码中看到。

会发生什么

  • 点击提交 - &gt;显示的错误消息:很好
  • 在第一个字段中输入条目并使用tab:fine(所有字段不再处于错误状态,消息消失)但完成AJAX更新后焦点丢失。好的,我在这里阅读的JSF和浏览器的预期行为,但如何解决?
  • 删除所有条目,点击输入 - &gt;在第三场输入并离开现场...没有任何变化......甚至消息也没有消失......我也不明白,因为我更新了所有字段

是否有任何解决方案,因为有一个这样的表单...在每次输入验证表格后会发生(意味着删除这样的全局错误)并且仍然可以通过使用tab键快速使用它?

THX。

1 个答案:

答案 0 :(得分:0)

这是一个非常恼人的问题,与JSF预制部分渲染的方式有关,有一篇关于JSF 2 AJAX focus issues的深度帖子。

这提供了使用JSF JavaScript API来监听触发的AJAX请求和重新聚焦的潜在解决方案,请查看帖子以获取更多详细信息。