动态匹配结果
动态匹配结果就是通过模式匹配的方式来匹配,关于这一点可以参见这篇《Struts2学习之Action的通配符使用》文章。在这篇文章中已经对这一点进行了详细的总结,这里就不再累述了。
Action属性值定位结果
在配置<result .../>元素时,除了可以使用上述的模式匹配方式以外,还可以使用${属性名}的方式来指定视图资源。在${属性名}这种方式下,${属性名}里的属性名就是对应Action实例里的属性。而且,不仅允许使用这种简单表达式形式,还可以使用完全的OGNL表达式,即以下这种形式:
${属性名.属性名}
关于使用Action属性值的代码示例请参见这篇《Struts2学习之结果类型总结》文章中redirectAction结果类型详解这小节。其中传递参数时,就使用了${属性名}这种方式来获取Action中的属性值。
1.动态结果。
有时我们需要在Action里取得我个要转跳的页面
看一下我们的struts.xml
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- Add packages here --> <constant name="struts.devMode" value="true" /> <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <!-- Add packages here --> <package name="testdefalult" namespace="/abc" extends="struts-default"> <action name="mya" class="com.pengli.struts.parampack.MyActionOne" method="Def"> <result>${value}</result> </action> </package> </struts> |
很简单只是把result里用${value}取代了具体和页面,那看一下我们的
action是怎么写的
代码如下 | 复制代码 |
package com.pengli.struts.parampack; import com.opensymphony.xwork2.ActionSupport; public class MyActionOne extends ActionSupport{ |
这是根据type给value赋值,转跳到相应的页面上
http://localhost:8080/Struts16ActionResultsDemo/abc/mya?type=a
正常页面
赋一个别的值
2.带参数的跳转
我们知道redirect形式的转跳是共享值栈的,我们上边说的是&{value}取的是一个整体页面,我们也可以用它来保存和提取参数
这里我们是基于1修改的代码
看一下structs.xml
代码如下 | 复制代码 |
<action name="myb" class="com.pengli.struts.parampack.MyActionOne" method="Defb"> <result>/NewJsp.jsp?v=${type}</result> </action> |
再看一下Action
代码如下 | 复制代码 |
public String Defb() { if(strType!=null) { myValue=String.valueOf(Integer.parseInt(strType)+1); } return SUCCESS; } |
再看一下jsp页面,因为xml里是直接轩跳的,没有经过Action
所以NewJsp.jsp?v=${type}取v的值时要这么取
代码如下 | 复制代码 |
<body> This is my JSP page. <br> parameters v <s:property value="#parameters.v"/> <s:debug></s:debug> </body> |
动态结果跳转
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"></constant> <package name="user" namespace="/user" extends="struts-default"> <action name="user" class="com.pegasus.web.UserAction"> <!-- 动态获得跳转的位置 --> <result>${r}</result> </action> </package> </struts> |
UserAction.java
代码如下 | 复制代码 |
package com.pegasus.web; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private int type; private String r; public int getType() { return type; } public void setType(int type) { this.type = type; } public String getR() { return r; } public void setR(String r) { this.r = r; } public String execute() { System.out.println("type:" + type); //在这里定义要跳转的页面的地址 if (type == 1) r = "/user_success.jsp"; else if (type == 2) r = "/user_error.jsp"; return "success"; } } |
总结
这篇文章虽然很短,但是理不糙,还是需要认真的看一看的,没准儿哪天就能用上呢,是吧。