2017-04-26 43 views
0

我有一個使用Primefaces 5.3的JSF前端,它使用Ajax動態更新字段。我遇到的問題是,有時我的Ajax調用失敗(例如:服務器響應500),但我的前端仍在改變。從本質上講,如果我的ajax失敗,我期望防止輸入字段的更改。換句話說,我只希望輸入字段在成功的Ajax響應時發生變化。如何僅在Ajax成功時更新JSF/Primefaces組件值,但在Ajax失敗時不做任何事

我對JSF相當陌生,所以我不知道如何處理這個問題。在常規的HTML/JS中,我將能夠存儲onclick的值,並在我的ajax錯誤處理程序中恢復了該值,但我不知道如何使用PF框架來執行此操作。

 <div class="Container25"> 
      <p:selectOneRadio id="grid" value="#{cc.attrs.answer.singleAnswer.codeValue}" layout="grid" columns="1" > 
       <f:selectItems value="#{cc.attrs.menuItems}" 
           var="item" itemLabel="#{msg[item.code]}" itemValue="#{item.code}" itemLabelEscaped="false"/> 

       <p:ajax event="change" listener="#{cc.attrs.onChange}" update="#{cc.attrs.update}" disabled="#{cc.attrs.onChange == null }" global="false" /> 
      </p:selectOneRadio> 
     </div> 

我試着給ajax組件添加resetValues屬性,但是這沒有幫助。另外,我試過在我的onstart處理程序中添加一些自定義JS,但它是未定義的。

我覺得必須有一個簡單的JSF/PF方法來做到這一點,但似乎無法找到它。

如何防止輸入值改變,直到Ajax調用成功返回(即:只更改onsuccess處理程序中的值),或在我的Ajax調用失敗的情況下重置原始單選按鈕選擇?我需要在我的onerror處理程序中恢復預先ajax狀態?

+0

也許這一個幫助:http://stackoverflow.com/questions/28538133/general-handling-of-ajax-call-error-on-client-side –

+1

我與防止啓動500錯誤或在錯誤頁面中報告發生了什麼。只要恢復這些值並保持在同一頁面上就是無用的,因爲放入相同的值會再次失敗。 – Kukeltje

+0

@kukeltje。同意,但目前這不是問題。我確實需要處理這種情況,但我還需要確保前端處於已知或穩定狀態。基本上,值的變化取決於成功的Ajax調用。所以如果Ajax沒有返回200,我不希望我的價值改變。 –

回答

0

您可以使用Primefaces RemoteCommand組件進行簡單的解決方案,只是將它嵌入到你的形式:

<p:remoteCommand name="revertSomeValues" 
      actionListener="#{relatedBean.revertValuesToDefaults}" 
      update="componentId" /> 

,並在豆方,你可以操縱模型:

@Named 
@ViewScoped 
public class relatedBean implements Serializable { 

    Integer codeValue; 
    //other model attributes and methods... 

    public void revertValuesToDefaults() {   
    setCodeValue(0); //supposing 0 is the default value 
    //handle other model attributes if needed 
    } 
} 

現在你可以設置onerror回調一樣 - > onerror =「revertSomeValues()」

如果需要的話,您也可以從您的bean程序更新Primefaces RequestContext的組件d:

RequestContext context = RequestContext.getCurrentInstance(); 
context.update("componentId"); 
+0

你什麼時候打這個電話? 500錯誤的ajaxesults?更好地防止這種錯誤 – Kukeltje

+0

是真的,但我認爲它是一個臨時服務器故障(可能超載與它不能分發在該特定請求的範圍等請求),否則整個問題變得無關緊要,因爲服務器不斷下降,它呢? – patateskafa

+0

現在的問題或訣竅是如何知道前面的值是什麼。假設我不想要默認值,而只是輸入在Ajax錯誤之前的值。有沒有辦法保存該值以恢復它? –

相關問題