动态结果集通过r来存储传递参数,将值存到值栈中,再用${}取值栈中的值
举个栗子:
先定义一个UserAction .java
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
//这里传两个参数
private String r;//r代表值栈的r
private int type;//type是随便一个参数
public String getR() {
return r;
}
public void setR(String r) {
this.r = r;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String add(){
//当type==1时,r="/user_add.jsp";
if(type==1)
r="/user_add.jsp";
//当type==1时,r="/useradd.jsp";
if(type==2)
r="/useradd.jsp";
return SUCCESS;
//这里的r会存到值栈中,如图
}
}
而我们在struts.xml中这么接收r
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<action name="useradd" class="com.struts2_01.user.UserAction" method="add">
<result>${r}</result><!--用${}取值栈中的值-->
</action>
</package>
</struts>
这就是动态结果集,用的很少,了解即可。
这里我在做实验的时候,出现了一点小问题,就是我用通配符配置Struts.xml时,总是报404,案例如下:
采用通配符配置的Struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="user" extends="struts-default" namespace="/user">
<!--这么访问http://localhost:8080/struts2_03/user/useradd?type=2-->
<!--按道理说这里没毛病啊-->
<action name="user*" class="com.struts2_01.user.UserAction" method="{1}">
<result>${r}</result>
</action>
</package>
</struts>
可是就是不行。
我猜测估计是使用了通配符就影响动态结果了,推测的原因是因为每次采用的是动态匹配到XXXAction,这样在result里写${r},环境并不清楚这个r(准确说是getR()方法)是在哪个Action里的。