如何在JSP页面中直接调用Action


头段时间在做项目过程中,需要在JSP页面中直接调用一个已有的Action,从而达到Action复用的目的,而无需重复

写相同的代码段。但在网上找了很多资料,折腾了很久都没解决问题,后来还是查找了我的那本红书(李刚写的《轻

量级Java EE企业应用实战》),终于解决了问题。原来,实现这个需求很简单,只需在jsp页面中使用struts2的

action标签。action标签允许在JSP页面中直接调用Action,并指定需要被调用Action的name和namespace。且如

果指定了executeResult 参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含到本页面中来。


action标签有如下几个属性:

var:这是一个可选属性,一旦定义了该属性,该Action将被放入ValueStack中,该属性可用id代替,但推荐使用var。

name:这是一个必填属性,通过该属性指定该标签调用哪个Action。

namespace:这是一个可选属性,该属性指定该标签调用的Action所在的namespace。

executeResult:这是一个可选属性,该属性指定是否要将Action的处理结果页面包含到本页面。该属性值默认值

是false,即不包含。

ignoreContextParams:这是一个可选参数,它指定该页面中的请求参数是否需要传入调用的Action。该参数的默

认值是false,即将本页面的请求参数传入被调用的Action。

下面是本示例应用中的Action类,这个Action类里包含了两个处理逻辑。看下面的Action类代码。

public class TagAction extends ActionSupport

{

//封装用户请求参数的author属性

private String author;

//省略author属性的setter和getter方法

...

//定义第一个处理逻辑

public String execute() throws Exception

{

return "done";

}

//定义第二个处理逻辑

public String login() throws Exception

{

ActionContext.getContext().

put("author", getAuthor());

return "done";

}

}

上面的Action类包含了两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻

辑Action。下面是在struts.xml文件中配置该Action的配置代码片段。

<!-- 定义第一个Action,使用TagAction的

execute方法作为控制处理逻辑 -->

<action name="tag1" class="org.crazyit.app.action.TagAction">

<result name="done">succ.jsp</result>

</action>

<!-- 定义第二个Action,使用TagAction的

login方法作为控制处理逻辑 -->

<action name="tag2" class="org.crazyit.app.action.TagAction"

method="login">

<result name="done">loginSucc.jsp</result>

</action>

上面配置文件将一个Action类定义成两个逻辑Action,可以在JSP页面中通过<s:action .../>标签来调用这两个逻辑Action。

 

下面是JSP页面中使用<s:action标签来调用这两个逻辑Action的代码片段。

下面调用第一个Action,并将结果包含到本页面中。<br/>

<s:action name="tag1" executeResult="true"/>

<hr/>

下面调用第二个Action,并将结果包含到本页面中。<br/>

但阻止本页面请求参数传入Action。<br/>

<s:action name="tag2" executeResult="true"

ignoreContextParams="true"/>

<hr/>

下面调用第三个Action,且并不将结果包含到本页面中。<br/>

<s:action name="tag2" executeResult="false"/>

本页面是否可访问?<s:property value="author"/>

在上面页面中的粗体字代码三次调用了目标Action,通过指定executeResult属性来控制是否将处理结果包含到本页

面中,还通过指定ignoreContextParams属性来决定是否将本页面的请求参数传入Action。除此之外,上面页面代

码中代码试图在本页面访问所调用Action对应Context里的author属性。但由于设置了executeResult="false",因而

页面中无法访问该属性。








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值