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

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

Struts2提供了一个非常完整的标签库,作用非常强大。但效率不太高,有人说Struts效率缓慢就是因为标签库,但是其功能不得不让人佩服。


Struts2标签库分为普通标签库和UI标签库,


普通标签库又下分为两个: 控制标签和数据标签.


UI标签库分为form标签库,非form标签库,ajax标签库(这一章暂时不介绍ajax)。


一. 引入标签库


需要在jsp页面的开头引入struts-tags标签库(以下例子都默认添加了)


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!--需要引入struts的标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>


该 struts2-tags 被放置在 struts-core.jar 包下面的 META-INF 文件 夹下。


20200412173854462.png


二. Struts2的控制标签库


常用的控制标签库主要用 if else if else标签库,表示判断.


iterator标签库表示循环判断 (c标签时用forEach) 先介绍两个常用的


为了简化操作,在jsp中用<% %>来添加数据。


二.一 if elseif else 标签库(与java中if一样,也可以if单独, if else)


二.一.一 普通判断


<%
  request.setAttribute("age",25);
%>
用if elseif else标签库表示人.
<s:if test="#request.age>47">
  这是妈妈
</s:if>
<s:elseif test="#request.age>26">
  这是大姐
</s:elseif>
<s:else>
  这是二姐
</s:else>


二.一.二 判断对象是否为空


if 语句一般是不会这样单独用的,


常用的用法有两种,一种是if 判断对象或者集合,避免空指向的问题


<%
  //User user=new User();
  //user.setSex("男");
  User user=null;
  request.setAttribute("user",user);
%>
<s:if test="#request.user!=null">
  显示性别: ${user.sex}
</s:if>
<s:else>
  没有数据显示,避免.属性时出现错误
</s:else>


单个对象可以判断,集合也可以判断 <s:if test="#request.userList!=null"> 再<s:iterator /> 循环输出。


第二种,常见的是根据对象中的属性,如status(状态0或者1) 来做出不同的选择。


如果是0就怎么样,如果是1就怎么样。


在上面的性别上进行相应的追加


<s:if test="#request.user!=null">
显示性别: 
  <s:if test="#request.user.sex='男'">
      男的
  </s:if>
  <s:else>
      女的
  </s:else>
</s:if>


如果是字符串,就用’'括起来,


如果是数值,就直接 .user.age=24 ,用一个=号,不能用两个==


二 .二 iterator循环对象输出


这是循环输出的,有好多个属性:


    <s:iterator begin="" end="" step="" 
value="" var="" status="">
</s:iterator>


可以分成两组形式:


  1. begin(开始位置),end(结束位置), step(步长),var(表示每次的值)是一组
  2. value(接收到的值), var(变量) ,status(状态值)是一组。


二.二.一 前端循环遍历生成结构


第一组是没有从后端得到数据,只是单纯的遍历前端,如遍历10个


  • 标签


     <ul>
    <s:iterator begin="1" end="10" step="1" var="i">
      <li>${i}</li>
    </s:iterator>
  </ul>


会生成10 个 <li> </li> 标签元素。


二.二.二 循环遍历集合,展示集合数据


第二组是循环遍历后端集合对象中的值,注意里面有一个status,表示状态. status=“sta”


status有几个常用的值,


1.count 表示数目

2.index表示下标,是从0开始的,

3.first 是否第一个,

4.last是否第二个,

5.even是否为偶数,

6.odd是否为奇数,为boolean类型值。


其中 最常用的是index。


从后端SingleAction中得到的数据(有关数据得到,可以参与第五章的一.五封装List 对象到前端)


 public String getData() {
    UserService userService=new UserService();
    List<User> userList=userService.findAll();
    ActionContext.getContext().getValueStack().set("userList",userList);
    return SUCCESS;
  }


那么在前端展示时


<s:iterator value="userList" var="user" status="sta">
    <tr>
      <td>下标为:${sta.index}</td>
      <td>数目为:${sta.count}</td>
      <td>${user.name}</td>
      <td>${user.sex}</td>
      <td>${user.age}</td>
      <td>${user.relation}</td>
      <td>
        <a href="#">查看详情</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <a href="#">修改</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <a href="#">删除</a>
    </tr>
</s:iterator>


20200412173955642.png


二.三 append 追加标签


<%
  List<Student> studentList1=new ArrayList<Student>();
  List<Student> studentList2=new ArrayList<Student>();
  studentList1.add(new Student(1,"张三",10));
  studentList1.add(new Student(3,"李四",20));
  studentList2.add(new Student(5,"王五",30));
  studentList2.add(new Student(7,"赵六",40));
  request.setAttribute("studentList1",studentList1);
  request.setAttribute("studentList2",studentList2);
%>
</head>
<body>
<s:append var="studentList3">
  <s:param value="#request.studentList1"></s:param>
  <s:param value="#request.studentList2"></s:param>
</s:append>
<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>


在<s:param>节点中添加要组合添加的标签,将值总体放置在<s:append>节点中的var变量中,以后遍历时只遍历var中的studentList3即可。 从后向前添加,有顺序。


二.四 generator 分隔标签


<s:generator separator="," val="'张三,李四,王五'" var="nameList"></s:generator>
<s:iterator value="#nameList" var="a">
  <s:property value="#a"/>
</s:iterator>


val表示要分隔的字符串,用’'单引号括起来,separator指定分隔符, var为整体的值。


再用s:iterator进行遍历输出


其中var该属性指定了保存在context中的名字,如果没有指定该属性将不会保存在context中

相关文章
|
8月前
|
XML Java 数据格式
JSP自定义标签(基础)
JSP自定义标签(基础)
28 0
|
XML SQL 存储
【Javaweb】JSP标准标签库
【Javaweb】JSP标准标签库
99 0
【Javaweb】JSP标准标签库
|
SQL XML Oracle
JSTL标签库(JSP标准标签库)
JSTL(JSP Standard Tag Library,核心标签库)是 JSP 标签的集合,它封装了 JSP 应用的通用核心功能。 JSP 标签是一组与 HTML 标签相似,但又比 HTML 标签强大的功能标签。JSTL 用来简化 JSP 开发,可以使我们不用嵌入 Java 代码就能够开发出复杂的 JSP 页面。 JSTL 包含 5 类标签库:core 标签库、fmt 标签库、fn 标签库、XML 标签库和 SQL 标签库。这 5 类标签库基本覆盖了 Web 开发中的所涉及的技术展示。
|
Java 开发者
Struts2的控制标签库和数据标签库(六)下
Struts2的控制标签库和数据标签库(六)
102 0
Struts2的控制标签库和数据标签库(六)下
|
XML Java 应用服务中间件
使用JSP的标准标签库JSTL处理XML格式的数据
使用JSP的标准标签库JSTL处理XML格式的数据
122 0
使用JSP的标准标签库JSTL处理XML格式的数据
|
SQL XML Java
12.标准标签库(JSTL)
1.JSTL标签库安装     JSTL的概念:   JSP标准标签库(JSP Standard Tag Library)是一个实现 Web 应用程序中常见的通用功能的定制标记库集功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问JSTL标签库由几个子标签库组成,主要分为以下几种:核心标签、XML标签、格式化标签(I18N)、SQL标签、函数标签库。
1830 0
|
XML Java 数据格式
|
Java 应用服务中间件 关系型数据库
JSTL 核心标签库使用总结
JSTL全称是Java标准标签库,是为了弥补默认JSP在视图表现方面的不足而出现的。其实在2017年的Java开发中用到的不是很多了。现在新的模板引擎比如Thymeleaf这样的貌似更加流行。
950 0
|
SQL Java 数据库连接