生成 JSON 元數(shù)據(jù)對象的典型方法
如果只需在條件語句和警報中引用一個 JavaScript 變量而不是服務(wù)器端代碼,您感覺怎么樣?這段代碼看上去是不是好多了?它沒有在 JavaScript 中混入服務(wù)器代碼。如果服務(wù)器端更改存儲元數(shù)據(jù)的方法,則無需再重寫客戶機(jī)腳本。這會使 JSON 對象的日子更輕松些。#t#
您將使用一個 JavaScript 對象把我們的驗證數(shù)據(jù)和消息分組到一個層級中。然后就像訪問層級的 JavaScript 對象一樣訪問這些消息。就是這樣,您已經(jīng)做到了!當(dāng)此 JSON 元數(shù)據(jù)對象就緒后,先前的 JavaScript 代碼片段將類似。
- if(cc < vehicleValidationsMetadata.CC.minCC ||
- cc > vehicleValidationsMetadata.CC.maxCC) {
- alert(vehicleValidationsMetadata.CC.RangeMessage);
- }
現(xiàn)在,問題是誰來準(zhǔn)備 JSON 元數(shù)據(jù)對象?嗯,只有服務(wù)器能做這項工作。服務(wù)器必須生成這個 JSON 對象,并將其提供給客戶機(jī)(瀏覽器)。一些 Java API 可以幫助您準(zhǔn)備此類(事實上是任意一類)JSON 對象。請參閱 參考資料 來查看那些 API。
生成 JSON 元數(shù)據(jù)對象的典型方法為:
- var vehicleValidationsMetadata = {
- "BrandName":{
- "CanContainDigits":{false},
- "MaxWords":{2},
- "FormatMessage":{"Brand Name cannot contain digits."},
- "WordLimitMessage":{"Brand Name cannot contain more than two words"}
- }, "RegistrationNumber":{
- "CanContainAlphabets":{false},
- "CanContainDigits":{"true"},
- "FormatMessage":{"Registration Number can contain only digits."}
- },
- "CC":{
- "minCC":{50},
- "maxCC":{5000},
- "FormatMessage":
- {"CC can only be numeric"},
- "RangeMessage":{"CC can be within range of 50 and 5000"}
- }
- }
為實體及其驗證消息準(zhǔn)備一個層級 Java 對象。 對這些實體及其驗證消息調(diào)用 toString()。這些實體及其驗證消息最有可能把一個 JSON 形式的字符串提供給您。
將該字符串另存到一個請求范圍內(nèi)。 在 JSP 中,獲取該字符串,并將其指派到 JavaScript 變量值的大括號內(nèi)。
最終的車輛元數(shù)據(jù)對象。
- function validateVehicleData() {
- var brandName = //get brand name from form field
- var registrationNumber = //get Registration Number from form field.
- var CC = //get CC from form field
- var brandNamebrandNameTokens = brandName.split(' ');
- if(brandNameTokens.length > vehicleValidationsMetadata.BrandName.MaxWords) {
- alert(vehicleValidationMessages.BrandName.WordLimitMessage);
- }
- .
- .
- .
- if((!vehicleValidationsMetadata.RegistrationNumber.CanContainAlphabets) &&
- isNaN(parseInt(registrationNumber))) {
- alert(vehicleValidationMessages.RegistrationNumber.FormatMessage);
- }
- var ccNum = parseInt(CC);
- if(ccNum < vehicleValidationMessages.CC.minCC ||
- ccNum > vehicleValidationMessages.CC.maxCC) {
- alert(vehicleValidationMessages.CC.RangeMessage);
- }
- }
服務(wù)器必須生成整個字符串,第一行和最后一行除外,因為當(dāng)前的用戶語言環(huán)境可能要求使用這些消息(并且只有服務(wù)器端代碼能完成這項工作)。在這里,需要注意的一點是此元數(shù)據(jù)對象僅用于驗證車輛。更理想的情況是將 JSON 對象對象封裝到 person 元數(shù)據(jù)對象中。
那樣,您就不需要再創(chuàng)建另一個 JSON 對象,而只需將該元數(shù)據(jù)對象包含到 person 元數(shù)據(jù)對象中。在將此元數(shù)據(jù)對象準(zhǔn)備好后,您可以使用該對象中的元數(shù)據(jù)和消息來驗證數(shù)據(jù)輸入和顯示消息。現(xiàn)在,驗證車輛輸入信息的 JavaScript 函數(shù)看上去就會跟 清單 4 一樣。