短路校驗器
從xwork-validator-1.0.3.dtd檔案中可以看到,校驗規則檔案的<validator .../>元素和<field-validator .../>元素可以指定一個可選的short-circuit屬性,這個屬性指定該校驗器是否是短路校驗器,該屬性的預設值是false,即預設是非短路校驗器。
短路校驗器其實是非常有用的,讀者朋友可以翻回去看如圖4.14所示的頁面,在密碼輸入框的上面看到兩行校驗提示資訊:
您必須輸入密碼!
您輸入的密碼隻能是字母和數字,且長度必須在4到25之間!
這種提示資訊是多麼的不友好啊,浏覽者此時完全沒有輸入密碼,而我們的應用一下子就顯示了兩條提示資訊(而且,第二條校驗提示完全是多餘的,完全沒有輸入密碼,當然長度不在4到25之間)。通常的做法是:如果浏覽者完全沒有為某個輸入框輸入任何内容,系統應該僅輸出第一行提示資訊,而不是一次輸出所有的校驗提示。
為了達到這種效果,我們應該采用短路校驗器。采用短路校驗器隻需要在<validator .../>元素或<field-validator .../>元素中增加short-circuit="true"即可。
修改上面的配置檔案,對于采用字段校驗器的校驗規則檔案,将使用者名必填和密碼必填校驗規則配置成短路校驗器。修改後的校驗檔案片段如下。
程式清單:codes\04\4.2\short-cut\WEB-INF\src\org\crazyit\app\action\RegistAction-validation.xml
<!-- 校驗Action的name屬性 -->
<field name="name">
<!-- 指定name屬性必須滿足必填規則 -->
<!-- 指定name屬性必須比對正規表達式 -->
</field>
<!-- 校驗Action的pass屬性 -->
<field name="pass">
<!-- 指定pass屬性必須滿足必填規則 -->
<!-- 指定pass屬性必須滿足比對指定的正規表達式 -->
在上面的配置檔案中,将user和pass的必填校驗器配置成短路校驗器。對于同一個字段内的多個校驗器,如果一個短路校驗器校驗失敗,其他校驗器都根本不會繼續校驗。
将校驗規則檔案修改成上面檔案所示的樣式後,如果依然不輸入使用者名和密碼,直接送出該請求,将看到如圖4.15所示的頁面。
<a href="http://blog.51cto.com/attachment/201205/164211249.jpg" target="_blank"></a>
圖4.15 短路校驗器的效果
相比之下,在一個<field .../>元素内定義字段校驗器,比使用帶有一個fieldName參數的<validator .../>元素好得多,而且XML代碼本身也清晰得多(字段分組更清晰了)。是以,筆者更傾向于使用字段校驗器風格。
圖4.15所使用的是伺服器端短路校驗器風格,如果使用用戶端短路校驗器風格(修改表單頁的s:form标簽,增加validate="true"),将看到如圖4.16所示的效果。
從圖4.16中可以看出,當在用戶端校驗中使用短路特性時,第一個表單域校驗失敗時将導緻系統不會校驗其他表單域。
<a href="http://blog.51cto.com/attachment/201205/164222246.jpg" target="_blank"></a>
圖4.16 用戶端校驗中使用短路特性
本文轉自
fkJava李剛 51CTO部落格,原文連結:http://blog.51cto.com/javaligang/882730 ,如需轉載請自行聯系原作者