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,如需转载请自行联系原作者

相关文章
|
Java
JSP第七篇【简单标签、应用、DynamicAttribute接口】(四)
上一篇博客中我已经讲解了传统标签,想要开发自定义标签,大多数情况下都要重写doStartTag(),doAfterBody()和doEndTag()方法,并且还要知道SKIP_BODY,EVAL_BODY等等的变量代表着什么,在什么方法中使用。这样实在是太麻烦了!
228 0
JSP第七篇【简单标签、应用、DynamicAttribute接口】(四)
|
JavaScript 数据库
|
索引
struts2一些概念介绍和标签的使用
  依赖注入   模块包含 struts.xml的模块包含格式   OGNL   对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。  OGNL标签分为:data tags和 control  tags 一、数据标签 property标签 获取值栈中的普通对象 是访问哪些有get和set的属性的方法 name:name: 访问值栈中的普通对象的普通方法    1.
960 0
|
Java 数据安全/隐私保护 Spring
struts2 标签大全
1): ---- 文本输入框 使用: (2): ----- 文本域输入框 使用: (3): ----- 密码输入框 使用: 前三个基本都是一样的。
1053 0
|
Java
JSP自定义简单标签入门之带有属性
上面写的那个简单标签来控制页面中标签内容的重复次数是固定的,这就是权限“写死了”,这是非常不好的行为,因为其灵活性太差。所以下面就介绍一种使用属性来控制标签内容输出次数的方法。 准备工作 创建实现了SimpleTag接口的实现类(或者是继承了SimpleTagSupport类的子类) 在类中为相应的属性字段添加setter方法,注意字段名称一定要一致。
1021 0
|
Java
JSP标签JSTL(5)--常用的标签函数
在使用JSTL的标签函数的时候请务必加上如下代码 否则是没有办法使用到这些函数的。 常用的JSTL函数释义 首先,我们要在页面的最上方引用: 下面是JSTL中自带的方法列表以及其描述 : fn:contains(string, subs...
983 0
|
Java
struts2 标签的使用之一 s:if
struts2 的web 项目中为了方便的编写jsp,标签是最好的选择 1:struts2 标签库的定义在**-core-版本号.jar META-INF 路径下找到struts-tags.tld文件;使用该标签需要在web 项目里面导入标签库:    A:在web.
864 0