前提介绍
当用低版本struts版本时,如2.1.8时,Action实现ModelDriven<>接口,当Ajax请求时数据能返回给前端Ajax(数据设置get()方法),但struts2 2.3版本后包括struts2 2.5 Beta3的最新版本也是不能返回JSON格式的数据了给前端了,即使设置了get方法。
总结
- 模型驱动
若想用模型驱动,还想返回JSON格式数据给前端时,可在(ModelDriven<实体类>) 实体类中设置相关的属性,并设置get/set方法,例如,注册时有一需求,用户名不可重复,就可在User实体类中添加一个String类型的变量,Action中为其赋值。)
代码
public class User implements Serializable {
。。。。
//返回给Ajax的数据
private String msg;
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
Action中:
public String checkname() {
map.put("aa","aa");
User userexit = userService.checkUsername(model.getUsername());
System.out.println(model.getUsername());
if(userexit==null){//用户不存在
this.model.msg="用户名可以使用";
System.out.println("用户名可以使用");
}else{
this.model.msg="用户名已被使用";
}
return "json";
}
Ajax
checkusername:function(){
$("#name").unbind("blur");
$("#name").bind("blur",function(){
var username=$("#name").val();
$.post("userAction_checkname",{username:username},function(data){
if(data.msg=="用户名可以使用"){
$("#msg").text("用户名可以使用");
$("#msg").css("color", "blue");
}else{
$("#msg").text("用户名已存在");
$("#msg").css("color", "red");
}
});
});
}
2.属性驱动直接get方法就可以返回JSON格式的数据
@Controller
@Scope("prototype")
public class AAAA extends ActionSupport{
@Resource
private UserService userService;
@Resource
private DepartmentService departmentService;
@Resource
private PostService postService;
private Long did;
private Long[] pids;
private User user=new User();
private String username;
private Map map=new HashMap();
//json测试数据
private int[] ints = {10, 20};
private String customName = "custom";
private String msg;
public void setMsg(String msg) {
this.msg = msg;
}
public User getUser() {
return user;
}
public int[] getInts() {
return ints;
}
public void setInts(int[] ints) {
this.ints = ints;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMsg() {
return msg;
}
public void setUser(User user) {
this.user = user;
}
public Long getDid() {
return did;
}
public void setDid(Long did) {
this.did = did;
}
public Long[] getPids() {
return pids;
}
public void setPids(Long[] pids) {
this.pids = pids;
}
/**
* 用户信息的添加 以及关联表的保存b 测试通过
*
* @return
*/
public String insert() {
// 根据did,获取相应的department
Department department = (Department) departmentService
.queryoneBase(did);
user.setDepartment(department);
// 根据pids,获取相应的post信息,在postDao中新建方法queryByPids();
Set<Post> posts = (Set<Post>) postService.queryByPids(pids);
user.setPosts(posts);
// 对user信息进行保存
userService.insertBase(user);
return SUCCESS;
}
/**
* 测试通过
* @return
*/
public String delete() {
System.out.println(user.getUid());
userService.deleteBase(user.getUid(), null);
return SUCCESS;
}
/**
* 同插入,建立三者之间的关系
* @return type类型
*/
public String update() {
System.out.println(user.getUid());
// 根据did,获取相应的department
Department department = (Department) departmentService
.queryoneBase(did);
user.setDepartment(department);
// 根据pids,获取相应的post信息,在postDao中新建方法queryByPids();
Set<Post> posts = (Set<Post>) postService.queryByPids(pids);
user.setPosts(posts);
// 对user信息进行保存
userService.updateBase(user);
return SUCCESS;
// 更新用户信息
}
public String queryone() {
return SUCCESS;
}
public String addForm() {
// 1.查询部门
Collection<Department> departmentList = departmentService
.queryallBase();
// 2.查询岗位
Collection<Post> postList = postService.queryallBase();
// 3.到"/jsp/user/add.jsp进行数据的展示",用到了<s:selecte>进行下拉菜单的展示
ActionContext.getContext().put("departmentList", departmentList);
ActionContext.getContext().put("postList", postList);
return "addForm";
}
public String checkname() {
map.put("aa","aa");
User userexit = userService.checkUsername(username);
if(userexit==null){//用户不存在
this.msg="用户名可以使用";
}else{
this.msg="用户名已被使用";
}
return "json";
}
@JSON(name="sr")
public String getCustomName() {
return customName;
}
Ajax可得到JSON数据:
![前端可获取到JSON格式的数据](http://img.blog.csdn.net/20160417131415093)