Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值

简介:
  标签文件是JSP自定义标签中的一种,实现的方法在WEB-INF\tags目录或子目录中建立一个.tag文件,如table.tag,并通过taglib指令来引用.tag文件所在的目录,代码如下:

< %@ taglib  prefix ="t"  tagdir ="/WEB-INF/tags" % >

    如果在标签文件中使用Struts 2标签,就会带来一个问题。下面先看一个例子。

    在WEB-INF\tags目录中建立一个table.tag文件,代码如下:

< %@ taglib  prefix ="s"  uri ="/struts-tags" % >
< %@ attribute  name ="index"  type ="java.lang.String"  required ="true"  % >
< table  border ="1"  style ="font-size:25px" >    
    
< s:iterator  var ="row"  value ="${index}" >
        
< tr >
            
< s:iterator  var ="cell"  value ="row" >  
                
< td >  
                    
< s:property  value ="cell"   />
                
</ td >
        
</ s:iterator >
        
</ tr >
    
</ s:iterator >
</ table >  

    在上面的标签文件中使用了<s:iterator>和<s:property>标签,<s:iterator>标签的value属性值使用了EL,这在低版本的Struts 2中是没有任何问题的,但在Struts 2.0.11及以后的版本中默认情况下并不能在Struts 2属性值中使用EL和JSP表达式(也就是说,rtexprvalue参数默认值是false),而只能使用Ognl表达式,而在这种情况下,上面的代码是无法正常执行的。一种解决方法是将Struts 2的发行包中相应标签的某个属性的rtexprvalue参数值设为true,但这种方法并不通用,因为它直接修改了Struts 2。
    另外一种方法是通过<s:set>标签将相应的值保存在ValueStack对象中,再使用Ognl表达式来读取。使用这种方法可以将上面的代码修改为如下的形式:

< %@ taglib  prefix ="s"  uri ="/struts-tags" % >
< table  border ="1"  style ="font-size:25px" >  
    
<!--   使用Ognl表达式引用index   -->   
    
< s:iterator  var ="row"  value ="index" >
        
< tr >
            
< s:iterator  var ="cell"  value ="row" >  
                
< td >  
                    
< s:property  value ="cell"   />
                
</ td >
        
</ s:iterator >
        
</ tr >
    
</ s:iterator >
</ table >

    下面的代码调用了table标签文件,并传递了index参数值:

< %@ page  language ="java"  contentType ="text/html; charset=UTF-8"  pageEncoding ="UTF-8" % >
< %@ taglib  prefix ="t"  tagdir ="/WEB-INF/tags" % >
< %@ taglib  prefix ="s"  uri ="/struts-tags" % >

<!--   index参数值为grid1   -->
< s:set  var ="index"  value ="grid1"   />  
< t:table />  

<!--   index参数值为grid2   -->
< s:set  var ="index"  value ="grid2"   />  
< t:table />  

    哪位读者还有其他的方法传递index参数值(不能直接修改Struts2发行包,不使用请求参数),请跟贴!   





 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214844,如需转载请自行联系原作者

相关文章
Thymeleaf内置对象、定义变量、URL参数及标签自定义属性
Thymeleaf内置对象、定义变量、URL参数及标签自定义属性
351 0
|
5月前
|
XML 前端开发 PHP
ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签
本文介绍了ThinkPHP6模板引擎中普通标签和XML标签的使用方法,包括模板引擎运算符函数、循环标签、判断标签以及一些特殊标签的使用。文中详细解释了普通标签的运算符和函数、注释、循环标签(foreach、volist、for)和判断标签(if、switch)的语法规范和示例。此外,还提到了literal和php标签用于原样输出和编写PHP代码的方法。
ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签
|
存储 IDE Java
JAVAWeb| 详解JSP技术、指令、隐式对象、标签
JAVAWeb| 详解JSP技术、指令、隐式对象、标签
197 0
JAVAWeb| 详解JSP技术、指令、隐式对象、标签
|
JavaScript 数据库
|
索引
struts2一些概念介绍和标签的使用
  依赖注入   模块包含 struts.xml的模块包含格式   OGNL   对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。  OGNL标签分为:data tags和 control  tags 一、数据标签 property标签 获取值栈中的普通对象 是访问哪些有get和set的属性的方法 name:name: 访问值栈中的普通对象的普通方法    1.
974 0
|
Java 数据安全/隐私保护 Spring
struts2 标签大全
1): ---- 文本输入框 使用: (2): ----- 文本域输入框 使用: (3): ----- 密码输入框 使用: 前三个基本都是一样的。
1067 0
|
XML Java 数据格式
jstl_开发第一个标签
前言 在我们的日常开发中,虽然标准jstl库能满足我们的大部分需求,但是在没办法满足的时候就需要我们 使用自定的标签, 说明 这里只演示最简单的标签开发流程,便于熟悉开发流程 开发流程 结构图 编写标签类 需要继承TagSupport类或者其他实现了jsptag接口的类或者接口. /** * 自定义标签类 * @author Eu
1266 0
|
Java
JSP标签JSTL(5)--常用的标签函数
在使用JSTL的标签函数的时候请务必加上如下代码 否则是没有办法使用到这些函数的。 常用的JSTL函数释义 首先,我们要在页面的最上方引用: 下面是JSTL中自带的方法列表以及其描述 : fn:contains(string, subs...
1006 0