struts2 include标签传入参数的调用

本文探讨了在Struts2框架中使用<s:include>标签时如何正确传递参数到被包含的JSP文件,并提供了通过手动设置valueStack来解决此问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 struts2 include标签传入参数的调用 收藏
    最近用Struts2框架开发一个项目。为保证页面代码美观,想把那些高度模式化的代码归并到同一个jsp中,然后利用标签初始化调用。

    不过遇到一个问题。就是当利用Struts2的 <s:include>标签在主页面引用子页面时,通过<s:param/>标签传入的值在子页面中无法获取:

主页面:

 <s:include value="./pair_ticket.jsp">
     <s:param name="operation" value="'active'"></s:param>
 </s:include>

pair_ticket.jsp是被引用的页面。但是如果在pair_ticket.jsp中利用

<s:property value="#request.operation"/>

或是<s:property value="operation"/>

或是<s:property value="%{#attr.operation}"/>

都无法获得从主页面中传过来的值。

看了Struts2的文档,说是由于include不会更新valueStack的缘故,所以ognl无法从valueStack中获取。同时文档介绍使用jstl可以在页面中获取:

${param.operation}

尝试过以后,发现果不其然。不过由于本人的子页面中充斥着大使用ognl的Struts2标签,而Struts2标签中又无法嵌套jstl标签或el表达式。所以这样无异于要求我重写页面代码,将所有需要变量的地方用html标签重写,这个哪里受得了?!

思量许久,突然想到,既然引入的时候,Struts2不会设置valueStack,为何不自己亲手设置?

因为文档中提到虽然ognl不能使用,但是jstl和scriptlet依然有效。于是子在页面开头写下如下代码:

<%@page import="com.opensymphony.xwork2.ognl.OgnlValueStack"%>
<%
 ((OgnlValueStack) request.getAttribute("struts.valueStack")).set(
   "operation", request.getParameter("operation"));
%>

第一个伪指令引入了ognl所要使用的valueStack包,接下来scriptlet中的两句将主页面通过request传过来的参数,直接设置到valueStack中。

于是页面中的Struts2标签就可以使用变量了:

<s:submit   id="%{operation}" value="%{getText('label.pair.'+operation)}" />

甚至还可以使用功能强大的ognl表达式做字符串拼接:

<s:textarea name="ticket.comment"  id="%{operation+'_comment'}">

如果遇到普通的html标签,或者只是页面显示,那么就使用el语言:

${param.operation}

呵呵。刚开始也着实被这样古怪的问题所困扰,网上寻找了半天也没有找到有效的解决方案。不过毕竟车到山前必有路,多看看文档,多探索一下框架的机理,总归能找出解决的方案的:)

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/james_wu_shanghai/archive/2009/03/29/4034739.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值