【问题标题】:Submit JSF form using JQuery and call server side function使用 JQuery 提交 JSF 表单并调用服务器端函数
【发布时间】:2012-12-05 17:14:20
【问题描述】:

我可以使用此代码提交我的 JSF 生成表单:

<h:commandButton  id="btnValidate" type="submit"  value="#{rb.REGISTER}" action="#{login.registerAccount}" />

但我想在提交表单之前处理 JS 代码,所以我将 onClick="test();"commandButton 类型添加到 button

<h:commandButton  id="btnValidate" type="button"  value="#{rb.REGISTER}" action="#{login.registerAccount}" onClick="test();" />

我的test 功能:

function test(){    
   $('#j_idt14\\:register_form').submit();

}

使用此代码,我的表单已提交,但我的 login.registerAccount 函数不再被调用。

如何用JS提交表单并调用服务端函数(属性action)?

【问题讨论】:

    标签: jquery forms jsf


    【解决方案1】:

    您不需要自己通过JS提交表单。它只会干扰 JSF 自己处理表单提交的工作。 onclick 只是为您提供了一个钩子,用于在提交表单之前执行一些 JavaScript 代码。除非您从 onclick 处理程序内部返回 false,否则将始终提交表单。

    所以,如果您对阻止表单提交不感兴趣,只是想一直提交,只需删除 submit() 调用即可。

    例如

    <h:commandButton ... onclick="onbeforesubmit()" />
    

    function onbeforesubmit() {
        // ...
    }
    

    或者,如果您真的有兴趣根据处理程序中的逻辑阻止表单提交,则相应地返回truefalse。返回false 将阻止表单提交。

    例如

    <h:commandButton ... onclick="return validate(this.form)" />
    

    function validate(form) {
        var valid = true;
    
        // ... (some logic which may set it to false)
    
        return valid;
    }
    

    (请注意,我已经演示了一种在函数内部获取父窗体的方法比使用 $('#j_idt14\\:register_form') 更简单;如果需要,您只需执行 $(form) 将其包装在 jQuery 对象中)

    【讨论】:

    • 不客气。请注意,客户端验证并不可靠,您永远不应该让您的业务代码依赖它。如果可能,请使用服务器端 (JSF) 验证。它们可以很容易地用 onchange/onblur 进行 ajaxified。另请参阅stackoverflow.com/questions/4013410/…
    • 我两个都做,我用 JS 确保所有字段都被填满,JSF 在验证的“忙碌工作”之后做,添加或不添加FacesMessages。再次感谢您
    • 亲爱的BalusC,在事件触发组件被禁用后,服务器端函数没有被调用。请告知如何处理这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多