JSF 2,ajax输入字段在firefox 10和ie9中表现不同

时间:2012-03-13 21:44:18

标签: ajax firefox jsf-2 internet-explorer-9

当光标处于输入“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”。在正常情况下,输入键检查以防止提交是不可取的,“模糊”是好的。有关如何让两个浏览器以相同的方式工作的任何建议吗?

1 个答案:

答案 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">