描述Hibernate propertyPath
Hibernate有很多值得學(xué)習(xí)的地方,這里我們主要介紹Hibernate propertyPath,包括介紹裝飾CSS代碼等方面。
本文中Hibernate propertyPath是惟一需要的屬性。size、 maxlength 和 required 都可以忽略。objectPath var 被設(shè)置為在 Hibernate propertyPath 中引用的屬性的父對(duì)象。因此,如果 Hibernate propertyPath 是 customer.contact.fax.number, 那么 objectPath 就應(yīng)該被設(shè)置為 customer.contact.fax。我們現(xiàn)在就使用 Spring 的 bind 標(biāo)簽綁定到了包含屬性的對(duì)象上。這會(huì)將對(duì)象變量設(shè)置成對(duì)包含屬性的實(shí)例的引用。接下來(lái),檢查這個(gè)標(biāo)簽的用戶是否已經(jīng)指定他/她們是否希望屬性是必須的。允許表單開發(fā)人員覆蓋從注釋中返回的值是非常重要的,因?yàn)橛袝r(shí)他/她們希望讓控制器為所需要的域設(shè)置缺省值,而用戶可能并不希望為這個(gè)域提供值。如果表單開發(fā)人員沒(méi)有為 required 指定值,那么就可以調(diào)用這個(gè)表單 TLD 的 required 函數(shù)。這個(gè)函數(shù)調(diào)用了在 TLD 文件中映射的方法。這個(gè)方法簡(jiǎn)單地檢查 @NotNull 注釋;如果它發(fā)現(xiàn)某個(gè)屬性具有這個(gè)注釋,就將 labelClass 變量設(shè)置為必須的。可以類似地確定正確的 maxlength 以及這個(gè)域是否是一個(gè) Date。
接下來(lái)使用 Spring 來(lái)綁定到 Hibernate propertyPath 上,而不是像前面一樣只綁定到包含這個(gè)屬性的對(duì)象上。這允許在生成 label 和 input HTML 標(biāo)簽時(shí)使用 status.expression 和 status.value。 input 標(biāo)簽也可以使用一個(gè)大小 maxlength 以及適當(dāng)?shù)念悂?lái)生成。如果前面已經(jīng)確定屬性是一個(gè) Date,現(xiàn)在就可以添加 JavaScript 日歷了。(可以在 參考資料 一節(jié)找到一個(gè)很好的日歷組件的鏈接)。注意根據(jù)需要鏈接屬性、輸入 ID 和圖像 ID 的標(biāo)簽是多么簡(jiǎn)單。)這個(gè) JavaScript 日歷需要一個(gè)圖像 ID 來(lái)匹配輸入域,其后綴是 _button。
使用CSS,就可以對(duì)必須的域進(jìn)行一下裝飾 —— 例如,讓它們以紅色顯示、在文本邊上顯示一個(gè)星號(hào),或者使用一個(gè)背景圖像來(lái)裝飾它。
對(duì)必須域進(jìn)行裝飾的CSS代碼
- label.required {
- color: black;
- background-image: url( /images/icons/flag_red.png );
- background-position: left;
- background-repeat: no-repeat;
- }
- label.required:after {
- content: '*';
- }
- label.optional {
- color: black;
- }
日期輸入域自動(dòng)會(huì)在右邊放上一個(gè) JavaScript 日歷圖標(biāo)。對(duì)所有的文本域設(shè)置正確的 maxlength 屬性可以防止用戶輸入太多文本所引起的錯(cuò)誤。可以擴(kuò)展 text 標(biāo)簽來(lái)為輸入域類設(shè)置其他的數(shù)據(jù)類型。可以修改 text 標(biāo)簽使用 HTML,而不是 XHTML(如果希望這樣)。可以不太費(fèi)力地獲得具有正確語(yǔ)義的 HTML 表單,而且不需學(xué)習(xí)基于組件的框架知識(shí),就可以利用基于組件的 Web 框架的優(yōu)點(diǎn)。
【編輯推薦】