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参数及标签自定义属性
303 0
|
XML 数据格式 开发者
XML元素的定义(标签定义)|学习笔记
XML元素的定义(标签定义)
|
JavaScript 数据库
|
索引
struts2一些概念介绍和标签的使用
  依赖注入   模块包含 struts.xml的模块包含格式   OGNL   对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。  OGNL标签分为:data tags和 control  tags 一、数据标签 property标签 获取值栈中的普通对象 是访问哪些有get和set的属性的方法 name:name: 访问值栈中的普通对象的普通方法    1.
967 0
|
Java 数据安全/隐私保护 Spring
struts2 标签大全
1): ---- 文本输入框 使用: (2): ----- 文本域输入框 使用: (3): ----- 密码输入框 使用: 前三个基本都是一样的。
1061 0
|
XML Java 数据格式
jstl_开发第一个标签
前言 在我们的日常开发中,虽然标准jstl库能满足我们的大部分需求,但是在没办法满足的时候就需要我们 使用自定的标签, 说明 这里只演示最简单的标签开发流程,便于熟悉开发流程 开发流程 结构图 编写标签类 需要继承TagSupport类或者其他实现了jsptag接口的类或者接口. /** * 自定义标签类 * @author Eu
1262 0
|
Java
struts2 标签的使用之一 s:if
struts2 的web 项目中为了方便的编写jsp,标签是最好的选择 1:struts2 标签库的定义在**-core-版本号.jar META-INF 路径下找到struts-tags.tld文件;使用该标签需要在web 项目里面导入标签库:    A:在web.
869 0