热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

struts2include标签传入参数的调用

最近用Struts2框架开发一个项目。为保证页面代码美观,想把那些高度模式化的代码归并到同一个jsp中,然后利用标签初始化调用。不过遇到一个问题。就是当利用Struts2的<s

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

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

 

主页面:

 
    
 

 

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

或是

或是

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

 

看了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标签就可以使用变量了:

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

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

${param.operation}

 

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

 


推荐阅读
author-avatar
YOYO看天下光_915
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有