我正在将应用程序从icefaces 1.8迁移到icefaces 3.2。这是一个复杂的应用程序,我在JSF 2中遇到登录页面的问题。
在页面中我们有类似的内容:
<script type="text/javascript">
function onEnter(ev)
{ if(ev==13)
{
document.getElementById('login:linkLogin').onclick();
}
}
</script>
.
.
.
<body onkeyup="onEnter(event.keyCode);">
.
.
.
<ice:commandLink id="linkLogin" action="#{loginBean.auth}" onclick=";encriptPass('#{login.rsaKeyMod}','#{login.rsaPubKey}');">
.
.
.
这适用于jsf 1.2 + icefaces 1.8没问题。 但是在jsf 2.1 + icefaces 3.2中我用这种方式修改了代码:
<script type="text/javascript">
function onEnter(ev)
{ if(ev==13)
{
document.getElementById('login:linkLogin').onclick();
}
}
</script>
.
.
.
<h:body onkeyup="onEnter(event.keyCode);">
.
.
.
<ice:commandLink id="linkLogin" action="#{loginBean.auth}" onclick=";encriptPass('#{login.rsaKeyMod}','#{login.rsaPubKey}');">
.
.
.
此代码不会以这种方式工作。如果按Enter键,表单只会重置,并且甚至不会调用bean.auth方法。
我在这里缺少什么。 JS在jsf2中的行为有何不同?
修改 我在这个帖子中找到了一个解决方案: Submit action by the enter key 最后一篇文章有解决方法。
答案 0 :(得分:0)
如果您在表单处于焦点时按Enter键,它将提交表单(如果您有提交按钮)并转到您在表单操作属性中定义的URL。您需要通过监听表单的submit事件并运行preventDefault函数来阻止此默认行为。
$('#someform').submit(function(e) {
e.preventDefault();
});