困扰了我很久的问题终于解决了!!!
今天记录一下
网上我查阅过许多 struct2 返回 JSON 数据格式的方式,比如使用 Servlet 阶段的 PrintWriter,还有自己转换成 InputStream 流返回 JSON 数据,甚至还有自己封装 JSON 格式数据的。 但是大部分尝试过,但是发现用不了,后来发现了 stuct2 自带的 json 转换的数据就很方便。
就是这个插件
使用这个插件之后,就不需要我们自己另外导 json 数据转换的包了,使用 struct2 自带的 ognl 表达式就可以帮我们注入数据
我搭建的是 SSH (stuct2 + hibernate5 + spring5)环境,项目采用 Maven 构建,开发工具是 Idea 2019
感兴趣的同学可以看一看 SSH 开发脚手架
今天只讲 stuct2 如何返回 JSON 数据
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-coreartifactId>
<version>2.3.35version>
dependency>
<dependency>
<groupId>org.apache.strutsgroupId>
<artifactId>struts2-json-pluginartifactId>
<version>2.3.8version>
dependency>
这里是我们需要自己添加进去的,不然开发工具识别不了我们写的东西,不然后面写 struct2 配置文件的时候就会爆红
比如我们想要返回一个字符串,就要在在成员变量(“全局变量”)中添加它,并给予对应的 getter 和 setter 方法,你要问为什么,这就是 ognl 表达式要做的事情。
比如我要做一个账户的用户名验证的功能,所以我可以这么写
@Controller("aa")
public class AjaxAction extends ActionSupport {
private String uname; // 接收前端的用户名
private String msg; // 要返回的内容
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
// 返回简单字符串
public String teststring() {
// 判断用户是否存在
if (uname.equals("admin")) {
msg="账户已经有人注册了";
} else {
msg="账户可以使用";
}
return "success";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Titletitle>
<jsp:include page="base.jsp"/>
head>
<body>
<div class="container">
<form action="checklogin" method="post" class="form-horizontal">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">账户:label>
<div class="col-sm-10">
<input type="text" class="form-control" name="username" id="username" placeholder="请输入你的账户">
div>
div>
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" class="btn btn-primary" value="Submit"/>
div>
form>
div>
<script type="text/javascript">
$("#username").on("change",function () {
$.ajax({
url: 'checkajax',
data: {
uname: $("#username").val()
},
type: "POST",
success:function (data) {
console.log(data)
}
})
})
script>
body>
html>
这里的 root 就代表你要返回的数据
<package name="ajax" namespace="/" extends="json-default" >
<action name="checkajax" class="aa" method="teststring">
<result name="success" type="json">
<param name="root">msgparam>
result>
action>
package>
如果你想要返回 list ,步骤是一样的,和 msg 是一样的方法,使用 ognl 表达式来帮我们完成数据的返回