现在的位置: 首页 > 综合 > 正文

struts2 namespace chain

2013年09月03日 ⁄ 综合 ⁄ 共 2560字 ⁄ 字号 评论关闭

首先介绍一下namespace
    Struts2的配置文件struts.xml当中有一个元素package ,这个元素有一个属性是 namespace。这个属性的作用是什么呢?

1. 确定该包内的action URL路径
例如:

Java代码
<package name="rodom"  namespace="/templates" extends="struts-default"> 
        <action name="testAction" class="test.web.TestAction"> 
            <result>test.jsp </result> 
        </action> 
</package> 

假设应用contextpath名字为tianxia,应用服务器端口号为8080若在浏览器中访问
testAction此时URL的路径为 http://localhost:8080/tianxia/ templates/
testAction.action

在配置namespace时注意的是在templates名字前加“/”

2. 确定返回jsp或ftl等文件的物理路径
如上面的配置test.jsp需放在templates目录下struts才能够找到
若想访问应用根目录下的文件例如index.jsp则如下配置:
<result>/index.jsp </result>

接下来讨论一下 <result type=”chain”>的配置
当action结果调用另一个action时result的类型设置为chain,则表示被调用的action会保持调用action的属性值。
Type=“chain”时 result标签的参数可以有下面4个
      • actionName
      • namespace
      • method
      • skipActions
举个例子:
配置如下:

Java代码
<action name="fm" class="test.web.SimpleAction"> 
            <result type="chain"> 
                <param name="actionName">chaintest </param> 
                <param name="method">look </param> 
            </result> 
</action> 
<action name="chaintest" class="test.web.ChainAction"> 
        <result type="freemarker">test.ftl </result> 
</action> 

<action name="fm" class="test.web.SimpleAction">
  <result type="chain">
  <param name="actionName">chaintest </param>
  <param name="method">look </param>
  </result>
</action>
<action name="chaintest" class="test.web.ChainAction">
  <result type="freemarker">test.ftl </result>
</action>

Java代码
public class SimpleAction extends ActionSupport{ 
    private String message; 
public String getMessage() { 
        return message; 
    } 
    public void setMessage(String message) { 
        this.message = message; 
    } 
public String execute() 
    { 
        message = "hello "; 
    } 

public class SimpleAction extends ActionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute()
{
message = "hello ";
}
}

Java代码
public class ChainAction extends ActionSupport{ 
    private String message; 
public String getMessage() { 
        return message; 
    } 
    public void setMessage(String message) { 
        this.message = message; 
    } 
public String execute() 
    { 
        message += " tianxia!"; 
        System.out.println(message); 
    } 

public class ChainAction extends ActionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute()
{
message += " tianxia!";
System.out.println(message);
}
}
当调用”fm”这个action返回SUCCESS时fm会调用test.web.ChainAction类的look()方法
控制台上会打印 hello tianxia!这说明SimpleAction的message被保存到ChainAction。

此处需要注意的是,
1.一个Action调用其它Action用chain的方式,调用者中的集合类中的元素依然会保存到被调用者执行。
2. <result type="chain"> chaintest! look </result>不能访问到test.web.ChainAction的look方法

抱歉!评论已关闭.