2012-12-18 26 views
1

我可以提交我的JSF生成的表單,此代碼:使用JQuery提交JSF表單並調用服務器端功能

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

,但我想提交我的形式,所以我說onClick="test();"commandButton類型之前處理JS代碼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)?

回答

4

您不需要由JS自己提交表單。它只會干擾JSF自己處理表單提交的工作。 onclick只是爲您提供一個鉤子來執行一些JavaScript代碼,然後表單被提交。除非您從onclick處理程序中返回false,否則將始終提交該表單。

因此,如果您不希望阻止表單提交併只想提交它,只需刪除submit()呼叫。

E.g.

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

function onbeforesubmit() { 
    // ... 
} 

或者,如果你在阻塞的形式取決於在處理程序中的邏輯提交真正感興趣的,然後返回truefalse相應。返回false將阻止表單提交。

E.g.

<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對象如有必要)

+0

非常好,你總是有我的問題的好答案:) –

+0

不客氣。請注意,客戶端驗證不健全,您不應該讓您的業務代碼依賴它。如果可能,請使用服務器端(JSF)驗證。他們可以很容易地通過onchange/onblur進行ajax化。另請參見其他人http://stackoverflow.com/questions/4013410/jsf2-validation-clientside-or-serverside – BalusC

+0

我都這樣做,我確保所有的字段都填滿了JS,並確保JSF在「繁忙的工作」之後驗證並添加或不添加'FacesMessages'。再次感謝您 –