Struts2的控制标签库和数据标签库(六)下

简介: Struts2的控制标签库和数据标签库(六)

二.五 subset截取标签


<s:subset source="#request.studentList1" count="2" start="2">
  <s:iterator status="status">
  <tr>
    <td><s:property value="#status.index+1"/></td>
    <td><s:property value="id"/></td>
    <td><s:property value="name"/></td>
    <td><s:property value="age"/></td>
  </tr>
  </s:iterator>
</s:subset>


source为要截取的集合的值, start为开始截取的点,从1开始. count为截取的数目


二.六 merge 添加标签(无序添加)


<s:merge var="studentList3">
    <s:param value="#request.studentList1"></s:param>
    <s:param value="#request.studentList2"></s:param>
</s:merge>
<table>
    <tr>
        <th>序号</th>
        <th>编号</th>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    <s:iterator value="studentList3" status="status">
    <tr>
        <td><s:property value="#status.index+1"/></td>
        <td><s:property value="id"/></td>
        <td><s:property value="name"/></td>
        <td><s:property value="age"/></td>
    </tr>
    </s:iterator>
</table>


添加的时候是没有顺序的,与add用法基本相同。


二.七 sort排序标签


二.七.一 给定数据


<%
  List<Student> studentList1=new ArrayList<Student>();
  studentList1.add(new Student(1,"张三",20));
  studentList1.add(new Student(3,"李四",10));
  studentList1.add(new Student(5,"王五",40));
  studentList1.add(new Student(7,"赵六",30));
  request.setAttribute("studentList1",studentList1);
%>


二.七.二 需要对Student添加比较器,添加比较器MyComparator


package com.java1234.comparator;
import java.util.Comparator;
import com.yjl.pojo.Student;
public class MyComparator implements Comparator<Student>{
  public int compare(Student s1, Student s2) {
    if(s1.getAge()>s2.getAge()){
      return 1;
    }else if(s1.getAge()<s2.getAge()){
      return -1;
    }
    return 0;
  }
}


二.七.三 指定bean实例化MyComparator比较器


<s:bean id="myComparator" name="com.java1234.comparator.MyComparator"></s:bean>


二.七.四 在s:iterator循环输出,包括在s:sort标签里面


<tbody>
        <s:sort comparator="#myComparator" source="#request.studentList1" >
      <s:iterator status="status">
  <tr>
    <td><s:property value="#status.index+1"/></td>
    <td><s:property value="id"/></td>
    <td><s:property value="name"/></td>
    <td><s:property value="age"/></td>
  </tr>
  </s:iterator>
  </s:sort>
</tbody>


三 数据标签库的用法


三.一 property输出标签器


<s:property value="" default=""  escapeHtml=""/>
<%
  request.setAttribute("name","<font color='red'>两个蝴蝶飞</font>");
%>
取出作用域中值:<s:property value="#request.name"/> <br/>
没有值为显示默认值:<s:property value="#request.name1" default="没有两个蝴蝶飞"/><br/>
是否忽略html标签为true:<s:property value="#request.name" escapeHtml="true"/><br/>
是否忽略html标签为false:<s:property value="#request.name" escapeHtml="false"/>


默认值是true, 表示将标签当成普通文字输出。 为false时会进行相应的翻译转换。


20200609113053407.png


三.二 set标签的用法


set设置普通的数字时:


没有作用域:
<s:set var="name" value="1"></s:set>
<s:property value="#name"/> <br/>


注意此时value=“1”


如果设置字符串或者英文字母即非数字时, 如value=“abc”, value="两个蝴蝶飞"时,是无法进行显示的.


会将abc和中文当成变量的。


设置在里面添加’’ 即 value="‘abc’"


没有作用域:<s:set var="name" value="'两个蝴蝶飞'"></s:set>
    <s:property value="#name"/> <br/>


set时添加作用域:scope


设置作用域:<s:set var="name" value="'两个蝴蝶飞'" scope="session"/>
    <s:property value="#session.name"/> <br/>
    <s:property value="#attr.name"/> <br/>


除了可以用它们的相同的作用域取出数据之外,


还可以用 #attr取出全部作用域的值,按照page,request,session,application进行依次获取


三.三 调试标签 debug


<s:debug></s:debug>


20200609113109420.png


可以分别显示 Value Stack 和 Stack Context 里面的数据,便于调试。


三.四 param 传参标签


<s:param name="" value="" />


传递参数,可用在<s:bean> 标签或者<s:url> 标签里面,也可以放置在<s:a >标签里面


注意,如果是普通数字的话,为value=“2” ,如果是字符串的中,应该是 value=" ‘字符串值’ " (里面有一个’’)


三.五 Bean实体类标签


<s:bean name="com.yjl.pojo.User" var="user">
  <!-- 用s:param传递参数 -->
  <s:param name="name" value="'两个蝴蝶飞'"></s:param>
  <s:param name="age" value="24"></s:param>
</s:bean>
<!-- 输出数据 -->
<s:property value="#user.name"/><br/> 
<s:property value="#user.age"/><br/> 


name为全限定名称,可以方便地将属性赋值到对象中。


三.六 url 网址标签和a标签


url中得到的只是一个链接,并不能单独 的使用,需要将其与<s:a> 标签共同组合使用。


<s:url action="Single_getData" namespace="/" var="a">
  <s:param name="name" value="'HelloStruts2'"></s:param>
</s:url>
显示出url的值:<s:property value="#a"/> <br/>
要引用s:url时,用%强制转换: <s:a href="%{#a}">跳转</s:a>


2020060911313179.png


<s:a> 标签也可以直接使用action进行跳转,也可以带参数。不用href属性,用action属性。


<s:a action="Single_getData" namespace="/" var="a">
  <s:param name="name" value="'HelloStruts2'"></s:param>
  跳转
</s:a>


20200609113147132.png


其中<s:a>标签也有一个target属性,与html中target属性意义一样,有target="_blank", target="_self"等。


三.七 include包含标签


<s:include value="head.jsp"></s:include>


与jsp中的静态包含一样。 注意value的值,文件的路径是否正确。 ctrl+鼠标点击时,可以正确跳转到相关的路径。


三.八 date标签


<s:date> 可以对日期进行相应的处理,使其按照规定的格式进行显示,前堤是一个正确的日期或者时间格式,不需要开发者在后端进行单独的日期处理了。


<%
  request.setAttribute("currentDate",new java.util.Date());
%>
<s:date name="#request.currentDate" format="yyyy年MM月dd日  HH mm:ss"/>


name为要显示的那个日期的值,format为显示的格式, y,M,d,H,m,s,S,与util.Date中的format的表达方式一样。


20200609113207914.png


这就是Struts2的控制标签和数据标签的基本用法.


谢谢您的观看!!!

相关文章
|
缓存 架构师 算法
【Conan 入门教程 】深入理解 Conan 2.X 中的 self.source_folder
【Conan 入门教程 】深入理解 Conan 2.X 中的 self.source_folder
238 1
|
6月前
|
PyTorch 编译器 算法框架/工具
NPU上如何使能pytorch图模式
本文介绍了PyTorch的`torch.compile`技术和TorchAir的相关内容。`torch.compile`通过将动态图转换为静态图并结合JIT编译,提升模型推理和训练效率。示例代码展示了如何使用`torch.compile`优化模型。TorchAir是昇腾为PyTorch提供的图模式扩展库,支持在昇腾设备上进行高效训练和推理。它基于Dynamo特性,将计算图转换为Ascend IR,并通过图引擎优化执行。文章还提供了TorchAir的使用示例及功能配置方法。
|
9月前
|
API 开发者 UED
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
通过学习API 13,我深入研究了**PreviewKit(文件预览服务)**。该模块支持快速预览多种文件类型(文本、图片、视频、音频、PDF等),为文件管理类应用提供系统级支持。本文分享了从搭建开发环境到实现单文件和多文件预览的全过程,并介绍了如何构建一个实用的文件预览助手应用。通过实践,不仅掌握了技术细节,还提升了个人开发能力。希望这些经验能为其他开发者带来启发与帮助。
200 10
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
|
11月前
|
存储 缓存 关系型数据库
什么是InnoDB
【10月更文挑战第17天】什么是InnoDB
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的个人健康管理网站的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的个人健康管理网站的详细设计和实现(源码+lw+部署文档+讲解等)
144 1
|
存储 JSON BI
友盟+Hologres:千亿级多维分析平台建设实践
Hologres 在友盟+统计分析、营销等多个产品线使用,很好地满足了用户行为分析、人群圈选与洞察场景的多维度分析、灵活下钻、快速人群预估和圈选等分析需求,提供客户更流畅的数据查询和分析体验。
|
JavaScript Shell 资源调度
1.【TypeScript 教程】TypeScript 安装与使用
1.【TypeScript 教程】TypeScript 安装与使用
254 4
解决 TypeError: Cannot read property ‘tapPromise‘ of undefined
解决 TypeError: Cannot read property ‘tapPromise‘ of undefined
617 0
|
测试技术 数据库 开发者
Django自动化测试入门:单元测试与集成测试
【4月更文挑战第15天】本文介绍了Django的自动化测试,包括单元测试和集成测试。单元测试专注于单个视图、模型等组件的正确性,而集成测试则测试组件间的交互。Django测试框架提供`TestCase`和`Client`进行单元和集成测试。通过编写测试,开发者能确保代码质量、稳定性和应用的正确协同工作。运行测试使用`python manage.py test`命令,建议将其纳入日常开发流程。
|
开发工具 git 开发者