重温经典struts1之常用标签

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

上一篇,我们学习了struts的基本概念,怎样搭建struts开发环境,从编写formbean,action到jsp页面,以及怎样将他们配入到struts-config.xml文件中,实现通过浏览器发送请求,将处理结果返回页面简单的login功能。
今天我们来学习下struts为我们提供的常用标签,标签是视图技术,主要用在jsp中,常用的功能是,在action中设置到request域或session域中的数据,进行空判断,日期数字格式化,基本数据类型,字符串或javabean中的对象以及html文本直接或转义,最终输出到页面,还可以遍历集合。


配置和使用

struts标签和国际化绑定,在struts-config.xml文件加入下记内容

<struts-config>
    中间略
    <message-resources parameter="MessageResources" />  ←追加的内容
    中间略
</struts-config>

在jsp页面中第二行引入下记指令
struts有很多标签库,我们今天主要来学习常用的bean和logic标签

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>

常用标签

  • < bean:write>
    用途是将基本数据类型,字符串或jiavabean中的内容打印到页面,对日期数字数据进行格式化,html文本内容直接或转义输出
    项目中常用于输出,格式化数据使用较少(基本都在java中进行)
    通过下边的示例以及运行效果可以更好的理解使用方法

action代码如下(示例):

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import xxx.xxx.pojo.Group;
import xxx.xxx.pojo.User;

public class BeanWriteAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		request.setAttribute("hello", "helloworld");
		request.setAttribute("htmlText", "<font color='red'>text red color</font>");
		request.setAttribute("today", new Date());
		request.setAttribute("n", 12345.1234);

		Group group = new Group();
		group.setName("group1");
		User user = new User();
		user.setUsername("zhang san");
		user.setAge(28);
		user.setGroup(group);

		request.setAttribute("user", user);
		return mapping.findForward("success");
	}
}

代码如下(示例):

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<h1>测试beanwrite标签</h1>
	<hr>
	<li>普通字符串</li>
	hello(标签):<bean:write name="hello"/><br>
	<p></p>
	html 文本(defalut):<bean:write name="htmlText"/><br>
	html 文本(filter=false):<bean:write filter="false" name="htmlText"/><br>
	<li>格式化日期</li>
	<p></p>
	系统时间(default):<bean:write name="today"/><br>
	系统时间(format):<bean:write name="today" format="yyyy-MM-dd HH:mm:ss"/><br>
	<li>格式化数字</li>
	<p></p>
	数值(default):<bean:write name="n"/><br>
	数值(format):<bean:write name="n" format="###,###.00000#"/><br>
	<li>javabean</li>
	<p></p>

	姓名:<input type="text" name="username" value="<bean:write name="user" property="username"/>"><br>
	年龄:<input type="text" name="age" value="<bean:write name="user" property="age"/>"><br>
	分组:<input type="text" name="groupname" value="<bean:write name="user" property="group.name"/>"><br>
	
</body>
</html>

< bean:write>运行效果
在这里插入图片描述

  • < logic:empty>,< logic:notempty>,< logic:present >,< logic:notPresent>
    这些标签通过字面意思来看,主要是判断,request或session中变量的值是否存在或是否为空值
    通过下边的示例以及运行效果可以很好的理解使用方法

action代码如下(示例):


import java.util.ArrayList;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import xxx.xxx.pojo.Group;
import xxx.xxx.pojo.User;

public class LogicAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		request.setAttribute("attr1", null);
		request.setAttribute("attr2", "");
		request.setAttribute("attr3", new ArrayList());

		return mapping.findForward("success");
	}
}

jsp代码如下(示例):

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<h1>测试logic标签(empty,notempty,present,notpresent)</h1>
	<hr>
	<logic:empty name="attr1">
	    attr1为空<br>
	</logic:empty>
	<logic:notEmpty name="attr1">
	    attr1不为空<br>
	</logic:notEmpty>
	<logic:present name="attr1">
	    attr1存在<br>
	</logic:present>
	<logic:notPresent name="attr1">
	    attr1不存在<br>
	</logic:notPresent>
	<p>
	<logic:empty name="attr2">
	    attr2为空<br>
	</logic:empty>
	<logic:notEmpty name="attr2">
	    attr2不为空<br>
	</logic:notEmpty>
	<logic:present name="attr2">
	    attr2存在<br>
	</logic:present>
	<logic:notPresent name="attr2">
	    attr2不存在<br>
	</logic:notPresent>
	<p>
	<logic:empty name="attr3">
	    attr3为空<br>
	</logic:empty>
	<logic:notEmpty name="attr3">
	    attr3不为空<br>
	</logic:notEmpty>
	<logic:present name="attr3">
	    attr3存在<br>
	</logic:present>
	<logic:notPresent name="attr3">
	    attr3不存在<br>
	</logic:notPresent>
	<p>
</body>
</html>

< logic:empty>,< logic:notempty>,< logic:present >,< logic:notPresent>运行效果
在这里插入图片描述

  • < logic:iterate>
    主要是遍历集合中的数据,实际项目中常用javabean集合以及嵌套的javabean的输出
    通过下边的示例以及运行效果可以很好的理解使用方法

action代码如下(示例):


import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import xxx.xxx.pojo.Group;
import xxx.xxx.pojo.User;

public class LogicIterateAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {

		Group group = new Group();
		group.setName("group1");

		List<User> users = new ArrayList<>();
		for (int i = 0; i< 10; i++) {

			User user = new User();
			user.setUsername("zhang san_"+i);
			user.setAge(28+i);
			user.setGroup(group);
			users.add(user);
		}

		request.setAttribute("users", users);
		return mapping.findForward("success");
	}
}

jsp代码如下(示例):

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<h1>测试logic迭代标签</h1>
	<hr>

	<table border="1">
		<tr>
			<td>姓名</td>
			<td>年龄</td>
			<td>所属组</td>
		</tr>
		<logic:empty name="users">
			<tr>
				<td colspan="3">没有符合条件的数据</td>
			</tr>
		</logic:empty>
		<logic:notEmpty name="users">
			<logic:iterate id="user" name="users">
				<tr>
					<td>
						<bean:write name="user" property="username"/>
					</td>
					<td>
						<bean:write name="user" property="age"/>
					</td>
					<td>
						<bean:write name="user" property="group.name"/>
					</td>
				</tr>
			</logic:iterate>
		</logic:notEmpty>
	</table>
</body>
</html>

< logic:iterate>运行效果
在这里插入图片描述

总结

以上就是struts为我们提供的基本标签的使用,以后我也会随时更新项目中一些常用的标签,下篇见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/236457.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知

背景 背景是这样的, 我的家里台式机常年 休眠, 并配置了 Wake On Lan (WOL) 方便远程唤醒并使用。 但是我发现, 偶尔台式机会被其他情况唤醒, 这时候我并不知道, 结果白白运行了好几天, 浪费了很多电。 所以我的需求是这样的&#xff1a; &#x1f914; 电脑唤醒后(可能是开…

spider小案例~https://industry.cfi.cn/BCA0A4127A4128A4141.html

一、获取列表页信息 通过抓包发现列表页信息非正常返回&#xff0c;列表信息如下图&#xff1a; 通过观察发现列表页信息是通过unes函数进行处理的&#xff0c;我们接下来去看下该函数 该函数是对列表页的信息先全局替换"~"为"%u"&#xff0c;然后再通过…

人工智能(pytorch)搭建模型22-基于pytorch搭建SimpleBaseline(人体关键点检测)模型,并详细介绍该网络模型与代码实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型22-基于pytorch搭建SimpleBaseline(人体关键点检测)模型&#xff0c;并详细介绍该网络模型与代码实现。本文将介绍关于SimpleBaseline模型的原理&#xff0c;以及利用pytorch框架搭建模型…

阿里面试:如何保证RocketMQ消息有序?如何解决RocketMQ消息积压?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 如何保证RocketMQ消息有序&#xff1f;如何解决RocketMQ消息…

Linux高级系统编程- 消息队列 与 内存共享

消息队列 消息队列是消息的链表&#xff0c;存放在内存中&#xff0c;由内核维护 特点&#xff1a; 1、消息队列中的消息是有类型的。 2、消息队列中的消息是有格式的。 3、消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取&#xff0c;编程时 可以按消息的…

Python中的并发编程(3)线程池、锁

concurrent.futures 提供的线程池 concurrent.futures模块提供了线程池和进程池简化了多线程/进程操作。 线程池原理是用一个任务队列让多个线程从中获取任务执行&#xff0c;然后返回结果。 常见的用法是创建线程池&#xff0c;提交任务&#xff0c;等待完成并获取结果&…

Nginx正则表达式

目录 1.nginx常用的正则表达式 2.location location 大致可以分为三类 location 常用的匹配规则 location 优先级 location 示例说明 优先级总结 3.rewrite rewrite功能 rewrite跳转实现 rewrite执行顺序 语法格式 rewrite示例 实例1&#xff1a; 实例2&#xf…

2023年阿里云云栖大会-核心PPT资料下载

一、峰会简介 历经14届的云栖大会&#xff0c;是云计算产业的建设者、推动者、见证者。2023云栖大会以“科技、国际、年轻”为基调&#xff0c;以“计算&#xff0c;为了无法计算的价值”为主题&#xff0c;发挥科技平台汇聚作用&#xff0c;与云计算全产业链上下游的先锋代表…

网线市场现状与发展趋势预测

随着物联网、5G、云计算等技术的迅速发展&#xff0c;全球对于高速、稳定的网络需求急剧增长&#xff0c;这进一步推动了网线市场的发展。各种网络应用场景&#xff0c;从家庭到企业、数据中心到智能城市&#xff0c;都需要大量的高质量网线来支持数据传输和通信需求。本文将对…

LinuxBasicsForHackers笔记 -- 管理用户环境变量

查看和修改环境变量 env – 您可以通过从任何目录在终端中输入 env 来查看所有默认环境变量。环境变量的名称始终为大写&#xff0c;如 HOME、PATH、SHELL 等。 查看所有环境变量 set – 查看所有环境变量&#xff0c;包括 shell 变量、局部变量和 shell 函数&#xff08;例…

Axure的安装及基本功能介绍

目录 一. Axure概述 二. Axure安装 2.1 安装包下载 2.2 安装步骤 三. Axure功能介绍​ 3.1 工具栏介绍 3.1.1 复制&#xff0c;剪切及粘贴 3.1.2 选择模式和连接 3.1.3 插入形状 3.1.4 点&#xff08;编辑控点&#xff09; 3.1.5 置顶和置底 3.1.6 组合和取消组合 …

利用Rclone将阿里云对象存储迁移至雨云对象存储的教程,对象存储数据迁移教程

使用Rclone将阿里云对象存储(OSS)的文件全部迁移至雨云对象存储(ROS)的教程&#xff0c;其他的对象存储也可以参照本教程。 Rclone简介 Rclone 是一个用于和同步云平台同步文件和目录命令行工具。采用 Go 语言开发。 它允许在文件系统和云存储服务之间或在多个云存储服务之间…

RE2文本匹配调优实战

引言 在RE2文本匹配实战的最后&#xff0c;博主说过会结合词向量以及其他技巧来对效果进行调优&#xff0c;本篇文章对整个过程进行详细记录。其他文本匹配系列实战后续也会进行类似的调优&#xff0c;方法是一样的&#xff0c;不再赘述。 本文所用到的词向量可以在Gensim训练…

如何用CHAT写方案?

问CHAT&#xff1a;帮我写一份航空无动力乐园的可执行方案 CHAT回复&#xff1a; 方案一&#xff1a;概念及地点筛选 航空无动力乐园是指以航空运动为主题&#xff0c;利用自然地形与风力进行滑翔、跳伞等无动力航空运动的户外休闲娱乐乐园。鉴于此&#xff0c;首需要确定乐园…

Java入门项目--蚂蚁爱购

简介 这是一个靠谱的Java入门项目实战&#xff0c;名字叫蚂蚁爱购。 从零开发项目&#xff0c;视频加文档&#xff0c;十天就能学会开发JavaWeb项目&#xff0c;教程路线是&#xff1a;搭建环境> 安装软件> 创建项目> 添加依赖和配置> 通过表生成代码> 编写Ja…

力扣111. 二叉树的最小深度

给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;2 示例 2&#xff1a; 输入…

这样的Python自动化测试面试题,测开来了都不一定都会把!

十、接口自动化 10.1 接口自动化怎么测试 ( Python requestspytest 版本) 原来我们接口自动化是用 python request pytest 执行 接口自动化其实主要就是接口测试的基础上填加了断言&#xff0c;参数化&#xff0c;动态关联 做接口自动化之前&#xff0c;我们也会划分模块&#…

【数据结构】C语言实现堆(附完整运行代码)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.项目功能演示(以大堆为例) 三.逐步实现项目功能模块及其逻辑详解 1.实现堆程序主函数 2.创建堆结构 3.堆的初始化 4.数据元素入堆 5.数据元素…

Linux上编译和测试V8引擎源码

介绍 V8引擎是一款高性能的JavaScript引擎&#xff0c;广泛应用于Chrome浏览器和Node.js等项目中。在本篇博客中&#xff0c;我们将介绍如何在Linux系统上使用depot_tools工具编译和测试V8引擎源码。 步骤一&#xff1a;安装depot_tools depot_tools是一个用于Chromium开发…

边缘智能网关如何应对环境污染难题

随着我国工业化、城镇化的深入推进&#xff0c;包括大气污染在内的环境污染防治压力继续加大。为应对环境污染防治难题&#xff0c;佰马综合边缘计算、物联网、智能感知等技术&#xff0c;基于边缘智能网关打造环境污染实时监测、预警及智能干预方案&#xff0c;可应用于大气保…