|

- 帖子
- 11
- 主题
- 0
- 精华
- 0
- 积分
- 16
- 疯狂金币
- 2
- 疯狂水晶
- 0
- 在线时间
- 8 小时
|
3#
发表于 2010-7-28 11:46
| 只看该作者
回复 2# bruceye 的帖子
我不是要在js里面做客户端验证,而是要利用JSONValidationInterceptor来对UI发来的数据进行服务器端验证,然后将验证后的信息再返回给UI。
我在尝试使用struts2-core-2.1.8.jar中的JSONValidationInterceptor,然后将源代码中的一些在js控制开启json校验部分给去掉了,但是使用没有作用,如果你明白我的意思的话,可以查看JSONValidationInterceptor的源代码,里面写明,当Action的fieldError或actionError中有校验失败信息时,该拦截器类会将这些错误信息序列化为JSON对象,最后的逻辑视图名是Action.NONE。现在它始终不返回到none的视图,即便按照API当中的使用说明:在使用JSONValidationInterceptore前,应该先引用validation校验器,但是校验失败后,始终返回到的是input视图,我感觉JSONValidationInterceptor没有起到作用。
以下是我更改后的MyJSONValidationInterceptor源码中用于拦截的部分:
- protected String doIntercept(ActionInvocation invocation) throws Exception {
- HttpServletResponse response = ServletActionContext.getResponse();
- HttpServletRequest request = ServletActionContext.getRequest();
- Object action = invocation.getAction();
- if (action instanceof ValidationAware) {
- // generate json
- ValidationAware validationAware = (ValidationAware) action;
- if (validationAware.hasErrors()) {
- if (validationFailedStatus >= 0)
- response.setStatus(validationFailedStatus);
- response.setCharacterEncoding("UTF-8");
- response.getWriter().print(buildResponse(validationAware));
- response.setContentType("application/json");
- return Action.NONE;
- }
- }
-
- return invocation.invoke();
- }
复制代码
以下是我在struts。xml中配置的自己的拦截器栈:
- <interceptors>
- <interceptor name="myJSON" class="interceptor.MyJSONInterceptor"/>
- <interceptor-stack name="myStack">
- <interceptor-ref name="servletConfig"/>
- <interceptor-ref name="i18n"/>
- <interceptor-ref name="actionMappingParams"/>
- <interceptor-ref name="params">
- <param name="excludeParams">dojo\..*,^struts\..*</param>
- </interceptor-ref>
- <interceptor-ref name="conversionError"/>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="myJSON" />
- </interceptor-stack>
- </interceptors>
- <default-interceptor-ref name="myStack" />
复制代码
以下是API中对JSONvalidationInterceptor的使用说明:
- <p>If 'validationFailedStatus' is set it will be used as the Response status
- * when validation fails.</p>
- *
- * <p>If the request has a parameter 'struts.validateOnly' execution will return after
- * validation (action won't be executed).</p>
- *
- * <p>A request parameter named 'enableJSONValidation' must be set to 'true' to
- * use this interceptor</p>
复制代码
[ 本帖最后由 xingyu_liu 于 2010-7-28 11:54 编辑 ] |
|