您的位置:首页 > 编程语言 > Java开发

struts2 与 springmvc 中参数传递问题

2017-07-19 00:00 218 查看
#前言

众所周知,springmvc 与 struts2 是两个非常优秀的 MVC 框架。

注:应该是属于 controller
并且均在内部集成了 参数传递 的功能。

不过在使用中,我发现 springmvc 与 struts2 的参数传递 功能在 从JSP传回 ** action **时有一点不同的地方。
因此写下这篇博客,加深印象。

#struts2
依赖于 valueStack 值栈

每一个 action 中都存在一个 vs,而 vs 里存储了当前action对象以及其它常用web对象(request,session,application.parameters)。

当页面上通过 url 传递 值时,会将 url 所附带的值 通过 request.setAttribute() 方法写入 request 域中,又因为 值栈的存在,因此 将之压入值栈。

** 例:**

url     ===    https://cn.allen.com/kxln1314 ? id=2;
request.setAttribute( id, 2);

这是struts2 参数传递的内部原理。

但是,当action 中 存在两个与 url 同名的 参数 时,将会产生冲突。从而导致问题。

例:

bean 的代码如下:

public class Bean {
int id;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}
}


**beanAction 的代码如下 : **

public class beanAction extends ActionSupport implements ModelDriven<Bean> {
Bean bean = new Bean();
int id;

@Override
public Bean getModel() {
return bean;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@Override
public String execute() throws Exception {
System.out.println(bean.getId());
System.out.println(id);
return "csgo";
}
}


**Url 如下: **

<a href="${pageContext.request.contextPath}/test_execute.action ? id=2">csgo</a>


分析 :



由图中的 debug 可知 ** id 只传给了 ** bean ** 中的id**

而并没有传给 在** beanAction ** 中定义 的 id

#springmvc

传值的原理暂时还清楚。
以下是代码:

** controller **:



url:



分析
从 debug 中可以看出 springmvc 可以同时 给参数中的 POJO类 (内部属性符合 参数名称)

以及简单类型 传参

#总结

springmvc 相对于 struts2 来说更灵活,可以同时传递给多个参数相同的值。

并且通过参数来传递,相比较于 struts2 的 action 中 属性来传递,其代码要简洁不少。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: