Struts2.0 默认提供了 simple,xhtml,css_xhtml,ajax 几个模板主题, 但对于 simple 不支持客户端的js验证.
对 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 这种格式.Java代码
Java代码
[align=left][/align]