标签文件是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发行包,不使用请求参数),请跟贴!   
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

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

  1. python图片保存为txt文件_python实现对文件中图片生成带标签的txt文件方法

    在深度学习中经常需要生成带标签的图片名称列表,xxxlist.txt文件,下面写一个简单的python脚本生成该文件列表. import os def generate(dir,label): fil ...

  2. js文件中怎么使用thymeleaf标签_007、Spring Boot集成Thymeleaf模板引擎

    1. Thymeleaf 介绍 Thymeleaf 是适用于 Web 和独立环境的现代服务器端 Java 模板引擎. Thymeleaf 的主要目标是为您的开发工作流程带来优雅的自然模板 - 可以在浏 ...

  3. Visdrone2019数据集.txt标签文件转换为voc格式.XML标签文件

    最近有同学问是否有Visdrone数据集的xml文件,由于本人之前训练数据的时候没有保存xml文件,所以无法共享. 为了解决这个问题,重新写了转换代码并贴出,供大家共同学习使用.(文末附上数据下载网盘 ...

  4. java foreach标签_Java中Velocity foreach循环标签详解

    Java中Velocity foreach循环标签详解 Java Velocity中foreach循环可以很容易的遍历数组或者集合. 定义 #foreach( $elem in $allElems) ...

  5. android 流失标签,Android中常见的热门标签的流式布局的实现

    一.概述:在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧(源码下载在下面最后给出) 类似的自 ...

  6. HTML中h标签和p标签,HTML 中 br 和 p 标签的区别是什么?

    HTML 中 br 和 p 标签的区别是什么? 在 html 中 br 和 p 标签都可以实现文本的换行效果, 那么它们之间有什么区别吗? 下面本篇文章就来给大家介绍一下 br 和 p 标签的区别, ...

  7. img标签 文件不存在_HTML常用标签

    <a> 标签的用法 <a>标签(超链接标签),可以创建通向其他网页.文件.同一页面内的位置.电子邮件地址或任何其他 URL 的超链接. <a>标签的作用 跳转外部页 ...

  8. Android 总结:Manifest文件中,application和activity标签属性详解

    android:hasCode = ["true" | "false"] android:icon = "drawable resource" ...

  9. 自定义标签TLD文件中,rtexprvalue子标签的意思

    rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否能够利用JSP表达式. 举例子: 1.定义一个TLD文件: <tag><name& ...

最新文章

  1. api数据加密的定义_云原生时代,如何构建开箱即用的数据加密防护?
  2. php 超全局变量(整理)
  3. CVE-2021-35211: SolarWinds Serv-U SSH 漏洞分析
  4. 手游运营重度化,抓好论坛专区“预热战场”
  5. 关于模型验证那点事儿
  6. 《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇
  7. 苹果A13和A11性能差距有多大?
  8. 局域网的分层结构的优点及分层原理
  9. arcgis交通可达性分析步骤_可达性分析(二):基于Network Analys的服务区分析
  10. python测试用例设计方法_设计测试用例的基本方法
  11. 终极算法【6】——贝叶斯学派
  12. 【Stats】Jarque Bera test正态性检验
  13. 业务流程图有哪些?一篇文章带你了解和绘制业务流程图
  14. 2021年韩国经济发展研究报告
  15. DCOS(centos 7.4/7.6)
  16. 计算机视觉基础知识点(根据cs231n以及博客内容整理)
  17. 量化交易之深入理解TB系统运行机制
  18. 【软件测试】linux命令-引用符号(反斜杠\、单引号‘‘、双引号““)
  19. 再谈异常处理try-catch-finally
  20. python读写csv文件方法总结_使用python读写CSV文件的三种方法

热门文章

  1. ORA-29339错误解决办法
  2. Python之PIL库的运用、GIF处理h
  3. [NOI 2017]整数
  4. 解决oj哈夫曼树问题,学习了priority_queue
  5. phpstorm如何进行文件或者文件夹重命名
  6. C# 2.0 锐利体验
  7. linux安装meb工具,linux-docker下安装禅道全部
  8. java throw与throws_基于Java中throw和throws的区别(详解)
  9. c++基础day03
  10. Vue2.0+SVG实现音乐播放圆形进度条组件,传入实时百分比实现圆圈进度动画效果