首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 JSON 处理缓存(2)

用 JSON 处理缓存(2)

JSON 能帮助您做什么?如果只需在条件语句和警报中引用一个 JavaScript 变量而不是服务器端代码,您感觉怎么样?不需要把服务器端代码包含在 JavaScript 中,而保存的服务器端元数据和消息中的更改也不会影响客户端脚本。这种方法太棒了,是不是?好的,那就是使用基于 JSON 缓存元数据时要做的。
您将使用一个 JavaScript 对象把我们的验证数据和消息分组到一个层级中。然后就像访问层级的 JavaScript 对象一样访问这些消息。就是这样,您已经做到了!
当此 JSON 元数据对象就绪后,先前的 JavaScript 代码片段将类似于 。
清单 2. 带有 JSON 元数据缓存对象的警报
1
2
3
4
if(cc < vehicleValidationsMetadata.CC.minCC ||
                     cc > vehicleValidationsMetadata.CC.maxCC) {
     alert(vehicleValidationsMetadata.CC.RangeMessage);
     }




现在,问题是谁来准备 JSON 元数据对象?嗯,只有服务器能做这项工作。服务器必须生成这个 JSON 对象,并将其提供给客户机(浏览器)。一些 Java API 可以帮助您准备此类(事实上是任意一类)JSON 对象。请参阅  来查看那些 API。
生成 JSON 元数据对象的典型方法为:
  • 为实体及其验证消息准备一个层级 Java 对象。
  • 对这些实体及其验证消息调用 toString()。这些实体及其验证消息最有可能把一个 JSON 形式的字符串提供给您。
  • 将该字符串另存到一个请求范围内。
  • 在 JSP 中,获取该字符串,并将其指派到 JavaScript 变量值的大括号内。
最终的车辆元数据对象看上去就会像  一样。
清单 3. 验证元数据 JSON 对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var vehicleValidationsMetadata = {
     "BrandName":{
                   "CanContainDigits":{false},
               "MaxWords":{2},
             "FormatMessage":{"Brand Name cannot contain digits."},
           "WordLimitMessage":{"Brand Name cannot contain more than two words"}
         },<br> "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"}
     }
}




服务器必须生成整个字符串,第一行和最后一行除外,因为当前的用户语言环境可能要求使用这些消息(并且只有服务器端代码能完成这项工作)。在这里,需要注意的一点是此元数据对象仅用于验证车辆。更理想的情况是将 vehicle 元数据对象封装到 person 元数据对象中。那样,您就不需要再创建另一个 JavaScript 变量,而只需将该元数据对象包含到 person 元数据对象中。
在将此元数据对象准备好后,您可以使用该对象中的元数据和消息来验证数据输入和显示消息。现在,验证车辆输入信息的 JavaScript 函数看上去就会跟  一样。
清单 4. 车辆数据验证函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 brandNameTokens = 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);
  }
}




这段代码看上去是不是好多了?它没有在 JavaScript 中混入服务器代码。如果服务器端更改存储元数据的方法,则无需再重写客户机脚本。这会使 JSP 编程人员的日子更轻松些。
返回列表