带有 AJAX 验证的 JSF 表单 - 焦点问题
Posted
技术标签:
【中文标题】带有 AJAX 验证的 JSF 表单 - 焦点问题【英文标题】:JSF Form with AJAX validation - Focus issues 【发布时间】:2013-10-19 21:47:15 【问题描述】:您好 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>
一个简单的表格,要求至少填写一个表格,立即错误重置和可选项卡。
但我没有得到它的工作,尝试了不同的东西,你可以在示例代码中看到。
会发生什么
点击提交 -> 显示错误消息:正常 在字段一中输入条目并离开选项卡:很好(所有字段不再处于错误状态并且消息消失)但在完成 AJAX 更新后焦点丢失。我在这里读到的 JSF 和浏览器的正常预期行为,但是如何解决? 删除所有条目,按回车键 -> 在字段 3 中输入并离开该字段……没有任何变化……甚至消息也没有消失……。我也不明白,因为我更新了所有字段是否有任何解决方案,用于拥有这样的表单......在每次输入表单验证后会发生(意味着删除此类全局错误)并且仍然可以通过使用 tab 键快速使用它?
谢谢。
【问题讨论】:
不清楚你在这里问什么,但是当输入改变时通过 ajax 更新托管 bean 肯定是不好的做法。最好忘记这一点,仅在使用按钮提交表单时执行验证。这样,您将获得快速的标签性能。 当然……但如果我现在输入某事。进入我想删除错误的字段,因为用户不清楚要填写至少一个字段,并且在他填写某事之后。合二为一,仍然显示错误。 基本上不是更新托管 bean,而是立即更新验证状态。 【参考方案1】:这是一个非常烦人的问题,与 JSF 执行部分渲染的方式有关,有一篇关于 JSF 2 AJAX focus issues 的深入帖子。
这提供了一种潜在的解决方案,即使用 JSF javascript API 来侦听触发的 AJAX 请求并重新聚焦,请查看帖子以获取更多详细信息。
【讨论】:
以上是关于带有 AJAX 验证的 JSF 表单 - 焦点问题的主要内容,如果未能解决你的问题,请参考以下文章