使用action标签可 以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace。如果指定 了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来。
action标签的属性:
id:可选属性,该属性将会作为该Action的引用ID
name:必填属性,指定该标签调用哪个Action
namespace:可选,指定该标签调用的Action所在的namespace.
executeResult:可选,指定是否要将Action的处理结果页面包含到本页面。默认是false,即不包含
ignoreContextParams:可选,它指定该页面中的请求参数是否需要传入调用的Action、默认是false,即将本页的请求参数传入被调用的Action。
下面是本示例应用中的Action类,包含连个处理逻辑。代码如下
public class TagAction extednds ActionSupport
{
//封装用户请求参数的author属性
private String author;
//author的get和set的方法,省略……
public String execute() throws Exception
{
return "done";
}
public String login() throws Exception
{
ServletActionContext.getRequest().setAttribute("author",getAuthor());
return "done";
}
}
上面的Action类包含两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action。代码如下
<package name="lee" extends="struts-default">
<!--定义第一个Action,使用lee.TagAction的execute方法作为处理逻辑-->
<action name="tag1" class="lee.TagAction">
<result name="done">succ.jsp</result>
</action>
<!--定义第二个Action,使用lee.TagAction的login方法作为处理逻辑-->
<action name="tag2" class="lee.TagAction" method=“login”>
<result name="done" > loginSucc.jsp </result>
</action>
..............
</package>
上面配置文件将一个Action类定义成两个逻辑Action,可以在JSP页面中通过<s:action.../>标签来调用这两个逻辑Action,部分jsp代码如下:
下面调用第一个Action,并将结果包含到本页面中。
<s:action? name="tage1" executeResult=“true”?/>
下面调用第二个Action,并将结果包含到本页面中。<br>
阻止本页面请求参数传入Action <br>
<s:action? name=“tag2” executeResult="true" ignoreContextParams="true"?/>
</hr>
下面调用第二个Action,且不将结果包含到本页面中。<br>
<s: action? name="tag2" executeResult="false"?/>
<s:property? value="#attr.author"/>
上面页面中,通过指定executeResult属性来控制是否将处理结果包含到本页面中;还可以通过ignoreContextParams属性来决定是否将本页面的请求参数出入Action。