锁定老帖子 主题:Struts2.0下的客户端验证(1)
精华帖 (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> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-26
看了一下该文件被下载了40多次,居然没有一个回复,难道对你们都没有帮助吗?楼主的代码帮了我大忙了,非常感谢.
|
|
返回顶楼 | |
发表时间:2007-06-26
如果不想修改的话,用theme="css_xhtml"也行,呵呵。
|
|
返回顶楼 | |
发表时间:2007-06-28
呵。我觉得如果要回复的话, 就要回复一些有实用价值的。
如果说一些客气话。好像没有大多的必要^^ |
|
返回顶楼 | |
发表时间:2007-07-09
如果我想用struts2的标签+XWork Validator+客户端的js验证+,但是我不想用它的样式,那么我应该如何设置呢?
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
浏览 11580 次