论坛首页 Java企业应用论坛

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

浏览 11580 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-25  

         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 <s:form><s:form>标签 <s:form>中就是要正确的设置 namespace 和</s:form></s:form></s:form>action两个参数, 其中action 不能 设置成 yourActionName.action  这中格式, 只能采用 yourActionName 或着yourActionName!methodName 或者 yourActionName!methodName.action 这种格式.

<s:form><s:form>

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

 

 

 

</s:form></s:form>
   发表时间:2007-06-26  
看了一下该文件被下载了40多次,居然没有一个回复,难道对你们都没有帮助吗?楼主的代码帮了我大忙了,非常感谢.
0 请登录后投票
   发表时间:2007-06-26  
如果不想修改的话,用theme="css_xhtml"也行,呵呵。
0 请登录后投票
   发表时间:2007-06-28  
呵。我觉得如果要回复的话, 就要回复一些有实用价值的。
如果说一些客气话。好像没有大多的必要^^
0 请登录后投票
   发表时间:2007-07-09  
如果我想用struts2的标签+XWork Validator+客户端的js验证+,但是我不想用它的样式,那么我应该如何设置呢?
0 请登录后投票
   发表时间:2007-08-17  
因为当前版本的Struts 2.0.9 不支持date类型的客户端验证
如果我想扩展其验证 应该从那一个地方下手?

尝试过修改 模板文件 form-close-validate.ftl  添加

<#elseif validator.validatorType = "date">
            if (field.value != null) {
  var value = Date.parse(field.value.replace('-','/') );  
      var datevalue= new Date(value );  
                if(isNaN(datevalue))
         {
                    addError(field, error);
                    errors = true;
                }
                if (<#if validator.min?exists>value <= Date.parse(${validator.min}.replace('-','/')) <#else>false</#if> ||
                    <#if validator.max?exists>value >= Date.parse(${validator.max}.replace('-','/')) <#else>false</#if> ){
                    addError(field, error);
                    errors = true;
                }
            }
            </#if>

执行时提示 validator.min 没定义。

不知何处修改,才能扩展自定义的验证类型。

当前支持的客户端验证类型有:
required validator
requiredstring validator
stringlength validator
regex validator
email validator
url validator
int validator
double validator
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics