struts2 的验证框架validation如何返回json数据 以方便ajax交互
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交互的更多相关文章
- SSM框架关于后台返回JSON数据中显示很多不需要的字段为NULL
xml 配置 spring mvc 的 json 返回忽略 null 字段 <mvc:annotation-driven> <mvc:message-converters regis ...
- 深入了解Struts2返回JSON数据的原理
首先来看一下JSON官方对于"JSON"的解释: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析 ...
- Struts2返回Json数据(使用Struts2插件)
这篇我将介绍如何使用Struts2的struts2-json-plugin.jar插件返回JSON数据. 一.其中主要步骤有: 1.将struts2-json-plugin.jar插件拷贝到项目的&q ...
- Flask 框架 重定向,捕获异常,钩子方法及使用jsonify在网页返回json数据
Flask 框架中常用到重定向方法来实现路由的跳转 ,路由跳转又分为站内跳转和站外跳转 常用的站内跳转方法为url_for 而常用的站外跳转为redirect 在这里提示一下: 在使用两种方法是须调 ...
- 【Struts2】SSH如何返回JSON数据
在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就 ...
- jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)
1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...
- (转)Struts2返回JSON数据的具体应用范例
转载自 yshjava的个人博客主页 <Struts2返回JSON数据的具体应用范例> 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...
- Struts2返回JSON数据的具体应用范例
早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找 ...
- Struts2返回JSON数据的具体应用范…
Struts2返回JSON数据的具体应用范例 博客分类: Struts2 Struts2JSON 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...
随机推荐
- Oracle的不完全恢复
一.不完全恢复特性 1.不完全恢复 不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点.不完全恢复会影响整个数据库,需要在MOUNT状 态下进行.在不完全恢复成功之后,通 ...
- zabbix3.0.4 部署之八 (zabbix3.0.4 微信报警)
[root@sv-zabbix ~]# cat /usr/local/zabbix/share/zabbix/alertscripts/weixin.py #!/usr/bin/env python# ...
- [分享] RT7LITE精简后无法封装解决办法
eagleonly 发表于 2016-6-9 11:00:01 https://www.itsk.com/forum.php?mod=viewthread&tid=368090&hi ...
- python 安装模块步骤
1.下载 pyocr-0.4.1.tar.gz tar.gz文件 解压 放到 c:/python27 文件夹下面 C:\Python27\pyocr-0.4.1 直接 cmd 命令 进入 ...
- 介绍开源的.net通信框架NetworkComms框架之九 合并DLL
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 许可是 ...
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...
- iOS开发UI篇—Quartz2D简单使用(一)
iOS开发UI篇—Quartz2D简单使用(一) 一.画直线 代码: // // YYlineview.m // 03-画直线 // // Created by apple on 14-6-9. // ...
- DTO概念
在开发过程中用到了DTO,简单了解了一下. DTO:数据传输对象,用来连接表现层和应用层之间的数据交互.数据传输对象是没有行为的POJO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数 ...
- 初学者SQL语句介绍
初学者SQL语句介绍 1.用 Select 子句检索记录 Select 子句是每一个检索数据的查询核心.它告诉数据库引擎返回什么字段. Select 子句的常见形式是: S ...
- General Motors China
General Motors Co., one of the world's largest automakers, trace its root back to 1908. The General ...