关于struts2 与Ajax整合的版本问题之模型驱动,属性驱动

前提介绍

当用低版本struts版本时,如2.1.8时,Action实现ModelDriven<>接口,当Ajax请求时数据能返回给前端Ajax(数据设置get()方法),但struts2 2.3版本后包括struts2 2.5 Beta3的最新版本也是不能返回JSON格式的数据了给前端了,即使设置了get方法。

总结

  1. 模型驱动

若想用模型驱动,还想返回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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值