2012-03-13 33 views
1

行为不同当光标在输入“测试”和用户按以简化的形式输入键等JSF 2,AJAX输入字段在Firefox 10和IE9

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

火狐将调用1提交的,即所调用提交和部分请求。

这种行为好吗?从应用程序方面来说这很麻烦,因为在客户端/服务器端有多重请求的预防/检测。

如果某些字段的验证/转换失败,我们并不知道页面结果,并且我们可能无法在两个浏览器上都更新“myText”。输入密钥检查以防止提交是不可取的,并且在正常情况下“模糊”是好的。任何建议如何使浏览器以同样的方式工作?

回答

0

这种行为确实不是所期望的。但MSIE作为整个浏览器本身也不是。这就是你必须作为一个Web开发人员处理的事情。当提交事件发生时,Firefox/Chrome/Safari/etc可以正确地跳过blur事件。

如果您的唯一目的是转换/验证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"> 
+0

想法是在“myText”(h:outputText)上显示计算值。它在myModel.someValue字段的调用应用程序阶段进行计算。感谢您的回复! – user1267541 2012-03-18 19:18:15