2013-10-11 48 views
2

嗨JSF專家那裏......JSF形式AJAX驗證 - 熱點問題

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:o="http://omnifaces.org/ui"> 
<h:head> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> 
</h:head> 
<h:body> 
<h:form> 
    <o:validateOneOrMore components="one two three" id="validate"/> 
    <p:message for="validate"/> 
    <p:inputText id="one" value="#{testBean.valueOne}"> 
     <p:ajax event="change" process="@this" update="@form"/> 
    </p:inputText> 
    <p:inputText id="two" value="#{testBean.valueTwo}"> 
     <p:ajax event="change" process="@this" update="two"/> 
    </p:inputText> 
    <p:inputText id="three" value="#{testBean.valueThree}"> 
     <p:ajax event="change" process="@this" update="one two validate"/> 
    </p:inputText> 
    <p:commandButton process="@form" 
        update="@form" 
        value="Submit" 
        partialSubmit="true" 
        action="#{testBean.submit}"/> 
    </h:form> 
</h:body> 
</html> 

一個簡單的形式與至少一種形式填寫,即時錯誤復位以及片能的要求。

但我沒有得到它的工作,嘗試了不同的東西,你可以在示例代碼中看到。

會發生什麼

  • 命中提交 - 顯示>錯誤消息:精
  • 在字段中的一個輸入項,並與標籤離開:罰款(所有領域都沒有處於錯誤狀態不再和消息消失),但完成AJAX更新後焦點丟失。好的,我在這裏閱讀JSF和瀏覽器的預期行爲,但如何解決?
  • 刪除所有條目,按回車 - >在字段三輸入並離開字段...沒有任何變化......即使消息沒有消失......我也不明白,因爲我更新了所有字段

是否有任何解決方案,有一個像這樣的形式......在每次輸入表單驗證後會發生(意味着消除這樣的全局錯誤),仍然通過使用Tab鍵可以快速使用它嗎?

thx。

+0

目前還不清楚你在這裏問的是什麼,但當輸入發生變化時,通過ajax更新託管bean是一種壞習慣。最好忘記這一點,只有在使用按鈕提交表單時才執行驗證。就像那樣,你會得到一個快速選項卡性能。 –

+0

很確定...但如果我現在進入某物。到我想刪除錯誤的字段中,因爲用戶不知道要填寫至少一個字段,並且在他填寫某些字段之後。合爲一體,仍顯示錯誤。 基本上不是更新託管bean,而是立即更新驗證狀態。 – markush81

回答

0

這是一個非常煩人的問題,它與JSF執行部分渲染的方式有關,有關於JSF 2 AJAX focus issues的深入文章。

其中提供了使用JSF JavaScript API監聽觸發的AJAX請求和重新調整焦點的潛在解決方案,請查看該帖子以瞭解更多詳細信息。