2013-03-13 64 views
4

我有一个带有inputText和commandButton的简单表单。JSF表单提交在FF但不在IE中

<h:form> 
    <h:inputText id="xyz" value="#{viewImpl.field}" onfocus="clearText(this)" onblur="setDefaultText(this)" /> 
    <h:commandButton action="#{viewImpl.method}"/> 
</h:form> 

如果我点击commandButton,表单被正确提交。 但是,如果我按Enter键,仍然在inputText-Field页面重新加载,但方法未被调用(服务器处于具有激活断点的调试模式)。

重要提示:这只发生在IE 8中。它在Firefox中运行得非常好。 任何线索我如何解决这个问题?

非常感谢!

回答

5

这是IE中一个字段形式的已知问题。按下回车键不会触发表单的第一个下一个按钮,因此其名称=值对不会出现在请求参数映射中,因此JSF无法识别该按钮以排列动作事件。

解决此问题的方法之一是添加第二个但不可见的输入字段到相同的形式。

<input type="text" name="dummy" style="display: none;" /> 

这将导致IE发送第一个下一个按钮的名称=值对。

+0

我认为另一个明智的选择是绑定一个自定义的键控监听器到一个输入字段,该字段在这种情况下标识回车键和触发命令按钮。 – skuntsel 2013-03-13 19:40:15

+0

@skuntsel:是的,但是如果JS被禁用,这会中断。我的答案提供了一种适用于所有情况的方法。 – BalusC 2013-03-13 19:40:51

+1

同意。评论意在作为一个评论,而不是破坏你的答案:) – skuntsel 2013-03-13 19:45:49

相关问题