2011-03-10 47 views
0

我有(在背襯豆映射到小數)在JSF頁面像以下內容的輸入字段JSF/RichFaces的/ A4J ==>組件/場轉換和重新描繪問題

<h:inputText disabled="#{volumeBean.grossVolumeDisabled}" id="grossVolume" size="10" validateOnExit="true" value="#{volumeBean.enteredGrossVolume}" > 
    <a4j:support ajaxSingle="true" event="onblur" ignoreDupResponses="true" oncomplete="checkFieldValidation(this)" onsubmit="updateDirty()"/> 
    </h:inputText> 

而一個A4J:的commandButton

<a4j:commandButton accesskey="T" action="#{volumeBean.revert}" button-type="ajax" disabled="#{volumeBean.revertDisabled}" id="volumeBean_reset"   immediate="true" reRender="volumesTable" value="#{msg.button_RESET}"/> 

這裏是重現我的問題的步驟:從頁面上的數據庫,以「刷新」中的所有數據 並請注意,無論發生是否有reRender屬性上A4J設置錯誤:支持

下面是重現以下步驟: - 只是進一步闡明:

  1. 導航到的BigDecimal輸入字段存在
  2. 類型AA到現場畫面(應爲數字而是把非數字字符故意)
  3. 標籤場外
  4. 通知,報告錯誤「AA」不是一個有效的netVolume
  5. 點擊上的RESET按鈕
  6. 所有的變化的領域有其原始值,除了那些已經進入
  7. 非數字數據,除非用戶手動刪除字段中的非數字數據或刷新整個屏幕,「壞數據」堅持

回答

0

當你做了一個重置​​,你發起了一個Ajax請求,整個表單被提交,並且你再次得到驗證錯誤。所以這個字段仍然有舊的(不正確的)值。

+0

重置按鈕有'immediate ='true'',所以它應該繞過驗證。 – Naganalf 2011-03-10 23:43:05

+0

由於會話失敗,不正確的值將保存在組件的submittedValue中。你是對的,當immediate =「true」時不會處理對話/驗證,但是當頁面被渲染時,使用來自submittedValue的值。您需要清除已提交的值。 – 2011-03-11 01:02:46

+0

如何自動或以編程方式清除submittedValue? – Nena 2011-03-11 23:13:04

0

嘗試將參數ajaxSingle="true"添加到按鈕。我發現immediate="true"不足以繞過對ajax組件的驗證。

+0

ajaxSingle不會跳過驗證。這意味着只有當前的組件會被處理,換句話說,就是經歷JSF的生命週期。 – 2011-03-11 01:19:03

+0

我試過使用ajaxSingle =「true」 - 沒有工作。該值仍以某種方式緩存在客戶端。 – Nena 2011-03-11 23:12:00