当光标处于输入“test”并且用户按照
这样的简化形式按下回车键<h:form>
<h:inputText id="test" value="#{myModel.someValue}" >
<f:ajax event="blur" execute="@this" listener="#{myBean.calculateStuff}" render="myText"/>
</h:inputText>
<h:outputText id="myText" value="#{myModel.myText}" />
<h:commandButton value="send" action="#{myBean.calculatedNextPage} ">
</h:form>
firefox调用1提交,即调用提交和部分请求。
这种行为可以吗?从应用程序方面来说,这是令人讨厌的,因为在客户端/服务器端有多个请求的预防/检测。
如果某个字段的验证/转换失败,我们事先不知道页面结果,并且我们可能无法更新两个浏览器上呈现的“myText”。在正常情况下,输入键检查以防止提交是不可取的,“模糊”是好的。有关如何让两个浏览器以相同的方式工作的任何建议吗?
答案 0 :(得分:0)
这种行为确实不太理想。但是MSIE作为整个浏览器本身也没有。这就是你作为一名网络开发者必须要处理的问题。当发生提交事件时,Firefox / Chrome / Safari /等会正确跳过模糊事件。
如果您的唯一目的是转换/验证someValue
,那么您应该在普通转换器和/或验证器内执行此操作,而不是在ajax侦听器方法内。
<h:inputText id="test" value="#{myModel.someValue}">
<f:converter converterId="someValueConverter" />
<f:validator validatorId="someValueValidator" />
<f:ajax event="blur" execute="@this" listener="#{myBean.calculateStuff}" render="myText"/>
</h:inputText>
这样你就可以安全地忽略“不必要的”ajax请求。
但如果你真的有一个硬头,你可以在你的特定例子中总是添加一个onsubmit
处理程序来跳过onblur
。
<h:form id="form" onsubmit="document.getElementById('form:test').onblur=null">