日期:2014-05-17  浏览次数:20580 次

struts2是如何获取浏览器带的参数的?!!
浏览器地址栏:
http://localhost:8080/Struts2/test/l_execute2.do?name=dzr&id=121212


struts.xml配置页面
<action name="l_*" class="cn.dzr.action.HelloWorldAction" method="{1}">
  <result name="success">/WEB-INF/page/hello.jsp</result>
  </action>


JSP页面:
<body>

<h2>name=${name }</h2>
<h2>id=${id }</h2>
</body>
</html>



Action页面:
	private int id;
private String name;

public int getId()
{
return id;
}

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

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
//......

       public String execute2()
{
return "success";
}



结果运行的时候,页面显示了传递进来的参数。可是不清楚,究竟是在什么时候,参数被传递进了action。



------解决方案--------------------
楼主要知道这个那就要去看struts2的源码了。自己看过struts2的源码,整个流程说起来有点长,可以告诉楼主struts2会把request中的参数都放入到他创建的值栈(ValueStack)中,action的创建是在Dispatcher的serviceAction方法(执行相应action)时创建的,创建类主要由ContainerImpl类负责,它会根据你xml中配置的对象工厂进行创建,如果配置了spring的工厂就用spring来创建,默认的xwork的对象工厂进行创建,赋值的时候还会经过相应的类型转换器,这个过程是要早于拦截器的。