头段时间在做项目过程中,需要在JSP页面中直接调用一个已有的Action,从而达到Action复用的目的,而无需重复
写相同的代码段。但在网上找了很多资料,折腾了很久都没解决问题,后来还是查找了我的那本红书(李刚写的《轻
量级Java EE企业应用实战》),终于解决了问题。原来,实现这个需求很简单,只需在jsp页面中使用struts2的
action标签。action标签允许在JSP页面中直接调用Action,并指定需要被调用Action的name和namespace。且如
果指定了executeResult
action标签有如下几个属性:
q
q
q
q
是false,即不包含。
q
认值是false,即将本页面的请求参数传入被调用的Action。
下面是本示例应用中的Action类,这个Action类里包含了两个处理逻辑。看下面的Action类代码。
public
{
//封装用户请求参数的author属性
private
//省略author属性的setter和getter方法
...
//定义第一个处理逻辑
public
{
return
}
//定义第二个处理逻辑
public
{
ActionContext.getContext().
put("author",
return
}
}
上面的Action类包含了两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻
辑Action。下面是在struts.xml文件中配置该Action的配置代码片段。
<!--
execute方法作为控制处理逻辑
<action
<result
</action>
<!--
login方法作为控制处理逻辑
<action
method="login">
<result
</action>
上面配置文件将一个Action类定义成两个逻辑Action,可以在JSP页面中通过<s:action
下面是JSP页面中使用<s:action标签来调用这两个逻辑Action的代码片段。
下面调用第一个Action,并将结果包含到本页面中。<br/>
<s:action
<hr/>
下面调用第二个Action,并将结果包含到本页面中。<br/>
但阻止本页面请求参数传入Action。<br/>
<s:action
ignoreContextParams="true"/>
<hr/>
下面调用第三个Action,且并不将结果包含到本页面中。<br/>
<s:action
本页面是否可访问?<s:property
在上面页面中的粗体字代码三次调用了目标Action,通过指定executeResult属性来控制是否将处理结果包含到本页
面中,还通过指定ignoreContextParams属性来决定是否将本页面的请求参数传入Action。除此之外,上面页面代
码中代码试图在本页面访问所调用Action对应Context里的author属性。但由于设置了executeResult="false",因而
页面中无法访问该属性。