struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror  />才能取出,(EL应该也可以)。

如果使用的是ajax访问,那么就比较悲剧,如何返回json数据以方便ajax交互。

开始想是不是可以直接将input以json方式输出,类似:<result name="input" type="json"></result> ,发现不行,因为type="json"后Result会把整个Action实例转换json字符串后直接作为服务器响应。

方法1:推荐 ,使用struts2提供的拦截器栈jsonValidationWorkflowStack

http://blog.163.com/guomaolin_gavin/blog/static/199618307201212232521748/

关于拦截器截器栈http://hi.baidu.com/wihwtsdkunbnsyr/item/390c735ae811e8968d12edaa

1.这里的action和普通的action一样没有区别。这是因为采用struts2的校验器是不会进过action的(除非校验全通过)

2.配置***-validation.xml   ***表示和要校验的action同一(***和action类名保存一样)

***-validation.xml 配置形式:

<validators>
<field name="username">
<field-validator type="requiredstring">
<message key="user.required"/>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="pass.required"/>
</field-validator>
</field>
</validators>

3.配置struts.xml这里的作用是。将得到的校验信息进行转成json返回给ajax

<package name="XXX" extends="json-default">,以下放到action里面,形式:

            <interceptor-ref name="jsonValidationWorkflowStack"></interceptor-ref>
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\..+$</param>
</result>

输出

{"fieldErrors":{"username":["user.required"],"password":["pass.required"]}}

4.ajxa进行接收、因为传给ajax的是json。故ajax用json进行接收

var message = data.fieldErrors;

方法2:

这里通过自定义一个result实现,往下看

http://bbs.csdn.net/topics/370186521

1.自己定义一个result

package result;

import java.io.PrintWriter;
import java.util.Map; import org.apache.struts2.ServletActionContext;
import net.sf.json.JSONObject;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.util.ValueStack; public class validators_json implements Result { @SuppressWarnings("unchecked")
@Override
public void execute(ActionInvocation arg0) throws Exception {
//获值栈中fieldErrors的值
ValueStack vc = ActionContext.getContext().getValueStack();
Map<String, String[]> ferrors = (Map<String,String[]>) vc.findValue("fieldErrors");
//获得输出流
ServletActionContext.getResponse().setCharacterEncoding("utf8");
ServletActionContext.getResponse().setContentType("text/html");
PrintWriter out = ServletActionContext.getResponse().getWriter();
//将map转换为json
JSONObject json =JSONObject.fromObject(ferrors);
//想客户端输出
System.out.println(json.toString());
out.print(json.toString());
out.close();
// for (Map.Entry<String, String[]> entry : ferrors.entrySet())
// System.out.println("key:" + entry.getKey() + " value:" + entry.getValue()); } }

2.然后修改配置文件struts.xml

添加type的定义,放在<package></package> 之间

<result-types>
<result-type name="validators_json" class="result.validators_json" default="true"> </result-type>
</result-types>

3.使用

<result name="input" type="validators_json"></result> 

这样 验证框架所产生的message就可以以json的方式发向客户端了,当然发送方式可以自己定义
实现了ajax+struts2验证框架异步验证数据。

最近在想,是不是可以不用struts2 的验证框架validation,自己写个validate()方法,将所有的验证消息都直接写道message里面就可以了

struts2 的验证框架validation如何返回json数据 以方便ajax交互的更多相关文章

  1. SSM框架关于后台返回JSON数据中显示很多不需要的字段为NULL

    xml 配置 spring mvc 的 json 返回忽略 null 字段 <mvc:annotation-driven> <mvc:message-converters regis ...

  2. 深入了解Struts2返回JSON数据的原理

    首先来看一下JSON官方对于"JSON"的解释: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析 ...

  3. Struts2返回Json数据(使用Struts2插件)

    这篇我将介绍如何使用Struts2的struts2-json-plugin.jar插件返回JSON数据. 一.其中主要步骤有: 1.将struts2-json-plugin.jar插件拷贝到项目的&q ...

  4. Flask 框架 重定向,捕获异常,钩子方法及使用jsonify在网页返回json数据

    Flask 框架中常用到重定向方法来实现路由的跳转 ,路由跳转又分为站内跳转和站外跳转 常用的站内跳转方法为url_for  而常用的站外跳转为redirect 在这里提示一下: 在使用两种方法是须调 ...

  5. 【Struts2】SSH如何返回JSON数据

      在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就 ...

  6. jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)

    1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...

  7. (转)Struts2返回JSON数据的具体应用范例

    转载自 yshjava的个人博客主页 <Struts2返回JSON数据的具体应用范例> 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...

  8. Struts2返回JSON数据的具体应用范例

    早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找 ...

  9. Struts2返回JSON数据的具体应用范…

    Struts2返回JSON数据的具体应用范例 博客分类: Struts2 Struts2JSON  早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...

随机推荐

  1. svn查看代码作者的命令

    svn blame **.java | grep ** svn查看代码作者的命令

  2. CentOS6.8下部署Zabbix3.0

    Centos6.8下部署安装zabbix3.0: 环境要求 PHP >= 5.4  (CentOS6默认为5.3.3,需要更新) curl >= 7.20 (如需支持SMTP认证,需更新) ...

  3. GIT ON WINDOWS

    https://help.github.com/articles/generating-an-ssh-key/

  4. VS2012添加PlaySound引用

    <windows程序设计>中给出的demo代码中有PlaySound的使用,但是因为这个是代码是针对VC6.0,其中说明的引用的添加和VS2012中有些许不同. 在VC6.0中projec ...

  5. JQ弹出框移动-插件分享~~~

    <script src="js/jQuery8.3.js" type="text/javascript"></script> <s ...

  6. spring随手笔记1:constructor-arg

    <bean id="Hello" class="com.ltf.captha.serviceImpl.HelloWorldServiceImpl"> ...

  7. IT的灵魂是流程,流程的灵魂是业务,业务的灵魂是战略

    IT的灵魂是流程,流程的灵魂是业务,业务的灵魂是战略.高效的IT平台不在于IT技术,而在于好的管理模式与流程设计 从以组织为核心转向以流程为核心 流程管理核心是从流程角度出发,关注流程是否增值,籍此建 ...

  8. css属性选择器

    1.E[att] 选择具有attr属性的E元素.2.E[att="val"] 选择具有att属性且属性值等于val的E元素3.E[att~="val"] 选择具 ...

  9. .htaccess语法中RewriteCond和RewriteRule意义

    今天看了301重定向设置的方法,对网站的首页权重有较重要意义.于是看了别人写的.htaccess文件发现一头雾水,于是查了一些资料来进一步理解. RewriteCond语法 RewriteCond T ...

  10. 对比Linux系统和Windows系统哪个更好

    最近半年来,我一直在读一本叫做<Linux就该这么学>的Linux教材,确实让我进步的很快,也慢慢的让Linux系统走入了我的知识认知中,那么学习前我们来对比下Windows和Linux的 ...