Struts2.0下的客户端验证(1)

阅读更多

         Struts2.0 默认提供了 simple,xhtml,css_xhtml,ajax  几个模板主题, 但对于 simple 不支持客户端的js验证.

 参考  http://jamsa.iteye.com/blog/40463  上的关于 webwork的客户端验证,对 simple 和xhtml 下的几个文件进行了修改,

在自己的项目下创建了个template/simple 目录,将修改后的几个文件 form.ftl, form-close.ftl,form-close-validate.ftl ,form-validate.ftl 放到该目录下,并将 xhtml下的 theme.properties 和 validation.js 文件 也copy到该目录下, 

修改  theme.properties  里面的内容为 parent = simple . 这样将来就可以 继续扩展simple模板主题 ,写自己的 ftl 文件.

并同时使得simple的主题具有了客户端验证的功能.

         另外,有些人也可能遇到过 即使使用xhtml 主题 设置了 form中的 validate="true"  也不能进行客户端验证.

这里就要注意几个问题:

通过浏览 form-close-validate.ftl 这个文件

我们发现 <#if ((parameters.validate?default(false) == true) && (parameters.performValidation?default(false) == true))>

这句代码, 里面还有一个条件就是 parameters.performValidation?default(false) == true ,只有它也成立的时候,验证才有效.

通过跟踪代码 org.apache.struts2.components.Form.java 类 中有个 

private void evaluateClientSideJsEnablement(String actionName, String namespace, String actionMethod) 方法,

里面有一句 ActionConfig actionConfig = runtimeConfiguration.getActionConfig(namespace, actionName);

如果 actionConfig  返回null 那么它的下面的 执行拦截的处理 就不会执行,performValidation 还是为false.

所以我们关键是要正确的 设置 namespace, actionName 这两个参数, 反映到 struts form 标签 中就是要正确的设置 namespace 和action两个参数, 其中action 不能 设置成 yourActionName.action  这中格式, 只能采用 yourActionName 或着yourActionName!methodName 或者 yourActionName!methodName.action 这种格式.

       附件里是 修改的 的几个模板文件

 

 

 

  • simple.rar (3.5 KB)
  • 下载次数: 814

你可能感兴趣的:(XHTML,Struts,CSS,Webwork,Ajax)