2015-09-13 57 views
1

這段簡單的代碼會在每次發生更改事件時發出警報。但是,Ajax狀態表示請求已完成,並且不會通知錯誤。<f:ajax onerror>即使完成,也會在每個ajax請求上調用

<p:ajaxStatus/> 
<p:spinner value="#{testBean.number}" 
    id="testSpinner" min="1" max="20"> 
    <f:ajax event="change" onerror="alert('error')"/> 
</p:spinner> 

的AJAX狀態的內容是這樣的一個:

<f:facet name="default"> 
    <h:outputText value="Status: StandBy" /> 
</f:facet> 

<f:facet name="onerror"> 
    <h:outputText value="Status: onerror" /> 
</f:facet> 

<f:facet name="complete"> 
    <h:outputText value="Status: Completed" /> 
</f:facet> 

回答

3

你必須編寫返回函數類型爲使用onerror屬性的東西。如果您編寫函數調用,則調用此函數以獲取值,如果此值爲函數類型,則不會有任何問題,但alert函數不會返回任何函數類型,而且還會生成打印的副作用屏幕上顯示一條消息。所以,你必須做的是:

定義myfunction功能:

<script> 
    var myfunction = function(){alert('error')}; 
</script> 

然後執行:

<f:ajax event="change" onerror="myfunction"/> 

注:

謹防不混淆<f:ajax ... /><p:ajax ... />。這兩者是等價的:

<f:ajax onerror="function(){alert('ERROR')}" /> 

<p:ajax onerror="alert('ERROR')" /> 
+0

是啊,這工作,但我不知道我很明白寫作警報直接(「」),寫的是指向一個變種之間的區別功能。你能詳細談談 ? – Ced

+0

JavaScript函數,即:'myfunction',是一個包裝了一段邏輯的值。你執行這個邏輯調用函數,即'myfunction()'。 JSF需要''onerror''屬性的函數類型的值,所以只有當被調用的函數返回另一個函數,並且在發生ajax錯誤時調用這個函數時,您必須編寫一個函數類型的變量,而不是常見的函數調用。 – lametaweb

+0

這也在vdldoc表示:https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/f/ajax.html *「的JavaScript函數的名稱,將處理錯誤「* – BalusC

相關問題