Struts2知识汇总二

2023-11-19

Struts2中的调试

在Struts2中可以使用

<s:debug/>

用来查看页面信息和找错,可以用来查看但前值栈中的内容

Struts2中的国际化(i18n):

使用i18们需要在struts.xml中写上

<constant name="struts.custom.i18n.resources" value="global" />

在Struts2中实现国际化,需要新建properties文件,properties文件内容格式为键值对
如下:
key = value
properties文件的命名格式:
bundlename_language_country.properties
bundlename为资源包名称:可以为globa、struts、model等
language为语言缩写:zh(中文)、en(英语)、fr(法语)
country为国家缩写。
properties文件放在类目录下,但是不能和类一起放在包里
Struts2默认使用英文环境
然后使用Struts2提供的标签设置name,一边Struts框架找到对应内容替换
properties文件放在类目录下,框架会默认自动寻找该文件。
可以使用Struts2标签获取值:

<s:property value="getText('key')"/>

大多数UI标签的key属性可用于从资源束检索信息

<s:textfield key="some.key" name="textfieldName"/>

i18n标签会将任意资源束推送到值栈,而i18n标签内的其他标签可以显示来自该资源束的信息:

<s:i18n name="bundle">
     <s:text name="key" />
</s:i18n>
Struts2 类型转换:

在html中,节手的数据类型默认为String,而在Struts2中,不需要进行转换就可以接收多个类型(使用转换器):
默认转换器:

Integer,Float,Double,Decimal
Date,Datetime
Arrays,Collections
Enumerations
Boolean
BigDecimal

如果类中有自己定义的对象实例,取出对象实例则显示默认调用toString()
这时不要覆写toString()方法
因为Struts2默认调用toString,如果直接覆写toString()方法,实例里的属性就会丢失。
(猜测:可能是因为框架检查代码,没有发现有将数据从值栈取出的操作,所以判断数据没有使用到,就直接将过程优化,不将值放入值栈,所以就取不到了)
这里就需要使用struts2提供的转换器:
(需要创建一个新的类,继承自StrutsTypeConverter):
覆写两个方法:

public Object convertFromString(Map map, String[] strings, Class type) {
//从字符串到对象转换,数据在strigs里,返回一个对象

}
public String convertToString(Map map, Object o) {
//将对象变为字符串,对象为o,需要强制转换
}

创建完新的转换器,还需要注册(在类目录下,新建一个properties文件):

xwork-conversion.properties

//内容
('被转换类路径') = ('转换器类路径')

//例
com.echo.some.SomeThing = com.echo.converter.SomeThingConverter

使用该命名的文件可以保证转换器全局可用。

Struts2 主题和模板和标签:

标签:
Struts2中的标签由Struts框架提供,运行时会替换扩展成html代码
例如:

//struts2标签
<s:textfield name="name" label="Name" />
//转化为
<tr>
<td class="tdLabel">
   <label for="name" class="label">Name:</label>
</td><td>
   <input type="text" name="name" value="" id="name"/>
</td>
</tr>

表单输入标签属性id默认为:表单id_属性名
如果标签属性没有赋值,则框架会默认从其他属性或者父标签获得默认值
如id和name属性

模板:
一些标签和合集,主要表示写在freemarker上,可复用的模板
主题:
一系列模板组成一个主题

Struts2中的内置主题:

simple theme:基本和普通html一样
xhtml theme:框架默认主题,增加了一些小功能和布局调整,基于html的两列表格布局
css_xhtml theme:同上,增加了css样式,基于css的两列表格布局

全局主题设置:

struts.properties文件中的struts.ui.theme的属性(默认为xhtml)
struts.ui还有其它属性可以设置

也可以使用部分标签的theme属性单独设置

也可以自定义主题:

struts2-core-x.y.z.jar/template

复制该目录下的主题到类目录下当作模板,修改内容
然后在struts.xml中添加以下内容:

//目录名
struts.ui.theme=
//父目录
struts.ui.templateDir=
struts.ui.templateSuffix=ftl
Struts2中异常应对:

当发生再代码中发生未知异常时,为了保证用户体验,可以使用Struts2提供的异常处理机制来保证发生异常时跳转到界面友好的页面而不是跳转到错误信息页面。
Struts2提供拦截器来拦截来自action类的异常,并将action的result结果设置为error返回,使action继续正常运行,所以每个action都要确保有一个error结果的页面。
在struts.xml中添加语句:
如下所示,为空指针异常处理:
如果处理其他异常,只需要修改 “java.lang.NullPointerException” 字段即可。

<global-exception-mappings>
	<exception-mapping exception="java.lang.NullPointerException" result="error" />
</global-exception-mappings>
Struts2中的注释(慎用):

通过使用Struts2中提供的注释,可以不需要配置struts.xml
@Results:结果集必须写在类和包声明之间用({})包围@Result结果项:

@Results({
		@Result(name = "success",location = "/success.jsp"),
		@Result(name = "error",location = "/error.jsp")
})

@Action(value="/action"):规定Action请求的URL,必须写在execute方法上面:

@Action(value="/action")
public String execute() {
	return SUCCESS;
}

验证注释:
验证注释有多个类型,都必须写在属性的getter上面:
@RequiredFieldValidator( message = “” ):不能为空
@IntRangeFieldValidator(message = “”, min = “”, max = “”):int类型结果范围验证
其他验证注释可查看文档
如果同时在struts.xml文件和Action类中声明验证注释,则注释都会生效。

为什么说注释慎用?
如果项目规模不大,那么其实无所谓使用注释或者是xml配置,如果项目变得庞大,action类的数量倍增,如果在action类里大量使用这种注释会使代码维护性变差,特别是在重构的时候,如果项目目录结构需要发生变化、action名称需要发生变化,调整注释则是一件相当困难的事情,如果所有信息统一使用xml配置,则会使调整变得容易。

Struts2标签(部分):

if、else、elseif标签可以直接获取值栈信息

<s:if test="age <= 10">
   <p>age is smaller than 10</p>
</s:if>
<s:elseif test="age <= 20 ">
   <p>age is smaller than 20</p>
</s:elseif>
<s:else>
    <p>age is bigger than 20</p>
</s:else>

迭代器:
其中list可以是java.util.Collection,java.util.Iterator

<s:iterator value="list">
  <p>item is: <s:property/></p>
</s:iterator>

其他标枪详见文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Struts2知识汇总二 的相关文章

  • Maven依赖冲突

    依赖冲突 依赖冲突是指项目依赖的某一个jar包 有多个不同的版本 因而造成类包版本冲突 依赖传递 项目依赖了A A依赖了B 项目自动依赖了B 注意 父项目中的依赖有
  • GitHub 上最火的开源项目 —— Java 篇

    很多开发者在看到自己感兴趣的项目时会使用 Star 功能 可以说 Star 的数量在一定程度上代表了开源项目的热门程度 本文整理了 Java 语言中 star 数最多的十五款开源项目 这些项目在 GitHub 上的 star 数均超过 15
  • 开发 Leader 们最该了解的软件度量指标

    无论何时 只要是要评估或对比某些东西 就需要使用度量指标 它们是可量化的衡量标准 用于判断每个行业的进展 这其中包括软件开发 在该领域 开发负责人依靠软件度量指标来跟踪性能和生产 在我们关于如何衡量和提高开发人员工作效率的博客文章中 我们讨
  • ext 6.0开发实例二

    由于Ext JS 6将原来的Ext JS和Sencha Touch合并为一个框架 因而在使用CMD来创建应用程序前 需要考虑清楚你是要创建一个通用应用程序 还是仅仅只是针对桌面或移动设备的应用程序 要做这样的考量 是因为通用应用程序和比较单
  • 关于java/android 数据序列化后SerialVersionUID的获取

    本人android 开发 遇到了一个关于数据序列化的坑 纪录下来以便以后查看 所有需要序列化本地的bean都需要继承Serializable 否则无法序列化 如果不了解序列化的知识请自行百度 我继承了Serializable 但是没有设置S
  • 2.5.14 动态内存共享AMS

    最后更新2021 08 02 这个还算是比较实用的功能 最早介绍过CPU共享 也提到过内存共享 但CPU共享是动态 实时 按需分配的 虽然有限制条件 而内存需要用DLPar功能 收工调节 至少不是实时分配 那内存可不可以实现类似CPU的实时
  • python笔记2--python 中安装package注意事项

    python笔记2 python 中安装package注意事项 使用python时候 经常需要安装相关的包 安装方法包括两种 1 直接使用easy install或者pip安装 2 下载package源码安装 1 直接使用easy inst
  • macbook上的vim怎么设置语法高亮和显示行号

    在我写这篇文章之前我的vim就很普通 没有语法高亮 无法显示行号 但是我通过在网上不断查阅一些处理方法和经验之后 我终于能将我MacBook电脑上的vim配置出语法高亮和显示行号了 作为一名乐于分享 乐于助人的新手程序员 我决定把我的解决办
  • 《Web应用安全权威指南》学习笔记

    第1章 什么是Web应用的安全隐患 第2章 搭建试验环境 邮件发送服务器Postfix POP3服务器Dovecot SSH服务器OpenSSH Web应用调试工具Fiddler 第3章 Web安全基础 HTTP回话管理 同源策略 Cook
  • k8s安全04--kube-apiserver 安全配置

    k8s安全04 kube apiserver 安全配置 1 介紹 2 安全配置 2 1 配置 insecure port 2 2 RBAC 2 3 Service Accounts 2 4 Researching Pod Security
  • Nginx 无法转发本地端口

    问题描述 本文主要分析解决 centos 下 nginx 配置端口转发后不生效 通过 nginx 配置 server 转发后 无法达到预期的转发目的 并出现502错误的问题 假设虚拟机 ip 为 192 168 0 8 并且在虚拟机内部署一
  • ISO七层模型

    物理层 O S I 模型的最低层或第一层 该层包括物理连网媒介 如电缆连线连接器 物理层的协议产生并检测电压以便发送和接收携带数据的信号 在你的桌面P C 上插入网络接口卡 你就建立了计算机连网的基础 换言之 你提供了一个物理层 尽管物理层
  • uni-app项目在微信开发者工具打开时报错[ app.json 文件内容错误] app.json: 在项目根目录未找到 app.json

    uni app项目在微信开发者工具打开时控制台报错 app json 文件内容错误 app json 在项目根目录未找到 app json env Windows mp 1 06 2303220 lib 2 32 0 解决方案 以下是一个u
  • 前端基础之ES6

    1 前后端对比 2 ES6 ECMAScript6 0 以下简称ES6 ECMAScript是一种由Ecma国际通过ECMA 262标准化的脚本 是JavaScript语言的下一代标准 2015年6月正式发布 从ES6开始的版本号采用年号
  • S-DES加密

    S DES加密 Simplified Data Encryption Standard S DES 是一个供教学的非安全的加密算法 它与DES的特性和结构类似 但参数小 明文分组为8位 主密钥分组为10位 采用两轮迭代 S DES加密过程包
  • 第十一讲、FPGA开发中xilinx vivado 平台时序分析系列课程-边沿对齐input delay ddr双沿采样时序约束与收敛

    我们在使用一些以太网PHY和FPGA接口是RGMII接口是DDR双沿结构 还有ADC芯片也也是DDR双沿采样接口 以及CMOS视频传感器也有很多DDR双沿源同步接口 我们这里以IMX222视频传感器的的DDR为例约束input ddr 接口
  • FPGA提示产生latch的报错

    在fpga的设计中有时会遇到 latch 的报错 1 latch是什么 Latch 就是锁存器 是一种在异步电路系统中 对输入信号电平敏感的单元 用来存储信息 锁存器在数据锁存使能时 数据被锁存 输入信号不起作用 这违背了组合逻辑中输出随输
  • selenium元素定位方法 id,name,class

    1 导入selenium from selenium import webdriver from time import sleep 2 打开浏览器 最大化 driver webdriver Chrome driver maximize w

随机推荐

  • Java 学习路线大全,再也不用迷路啦(持续更新)

    路线特点 最新 完整一条龙 从入门到入土 表示推荐学习 给出目标 学习建议 关键知识点 最优资源以及各类资源推荐 视频 书籍 文档 项目 工具等 划分阶段 更有计划 且在最后给出持续学习的方向 探索 Java 程序员发展的无限可能 前言 首
  • SQLSERVER排查CPU占用高的情况

    一般排查都是用下面的脚本 一般会用到三个视图 sys sysprocesses dm exec sessions dm exec requests sys sysprocesses 系统表是一个很重要的系统视图 主要用来定位与解决Sql S
  • 存储类型auto,static,extern,register的区别 <转>

    变量和函数的属性包括数据类型和数据的存储类别 存储类别指数据在内存中存储方式 静态和动态 包含auto static register extern四种 内存中 具体点来说内存分为三块 静态区 堆区 栈区 外部变量和全局变量存放在静态区 局
  • 半监督学习——数据精馏(论文阅读)

    论文地址 https arxiv org pdf 1712 04440 pdf 1 论文与摘要 Data Distillation Towards Omni Supervised Learning 摘要 作者提出一种特殊的半监督学习方法 取
  • android 最新动态,浅谈Android动态页面(一)

    这是一个很微妙的东西 可能平时经常用到 但是没注意 我想对这个内容进行一个总结并提出一些看法 谈的是动态页面 不是动态布局 一 什么是动态页面 什么是动态页面 我认为是一种在开发时的设计思想 最终展示的页面会随着数据的改变而改变 或者说会根
  • OpenCV中如何读取URL图像文件

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 由来 最近知识星球收到的提问 觉得是一个很有趣的问题 就通过搜集整理归纳了一番 主要思想是通过URL解析来生成数据 转为图像 Mat对象 但是在Python语言与C 语言
  • Java基础学习总结(1)——equals方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 equals方法介绍 1 1 通过下面的例子掌握equals的用法 1 package cn galc test 2 3 public class TestEquals
  • 简单spring cloud服务升级实现

    1 升级原则 隔离性 v1升级到v2时 相互独立 互不不干扰 稳定性 服务不停止 完成升级 接口保持畅通 2 具体实现 2 1 eureka项目 搭建eureka 网上很多 就省略了 2 2 feign接口项目 2 2 1 依赖
  • React Hooks

    React Hooks 为什么使用 React Hook useState hook useReducer hook useEffect hook useRef hook useLayoutEffect hook useImperative
  • GPIO口的八种工作状态

    一直对GPIO的工作状态不是很熟悉 导致在设置IO状态时 经常会设置成推挽上拉 或者推挽下拉 开漏上拉等问题 虽然看起来没有影响MCU工作 但感觉这是一种无知的表现 现在总结下GPIO口的八种工作状态 其中四种输入状态 四种输出状态 一 输
  • (STM32笔记2)基于hc05的蓝牙实验

    实验任务 开机检测 HC05 蓝牙模块是否存在 如果检测不成功 则报错 检测成功之后 显示模块的主从状态 并显示模块是否处于连接状态 DS0 闪烁 提示程序运行正常 按 KEY0 按键 可以开启 关闭自动发送数据 通过蓝牙模块发送 按 KE
  • 简单工厂模式

    简单工厂模式 一 概念 从设计模式的类型上来说 简单工厂模式是属于创建型模式 又叫做静态工厂方法 StaticFactory Method 模式 但不属于23种GOF设计模式之一 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 简
  • ASIC中带有MUX的时钟路径时序约束

    链接 https pan baidu com s 1BrAsabLYLGbvdXJB2LQwiA 提取码 mgrn
  • 回溯法详解

    一 回溯法 深度优先搜素 1 简单概述 回溯法思路的简单描述是 把问题的解空间转化成了图或者树的结构表示 然后使用深度优先搜索策略进行遍历 遍历的过程中记录和寻找所有可行解或者最优解 基本思想类同于 图的深度优先搜索 二叉树的后序遍历 分支
  • 旋转变换(一)旋转矩阵

    转自 https blog csdn net csxiaoshui article details 65446125 1 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换 在仿射变换中的基本变换包括平移 旋转 缩放 剪切
  • Kotlin核心编程(七)

    Kotlin核心编程 七 文章目录 Kotlin核心编程 七 多继承问题 接口实现多继承问题 getter和setter 内部类解决多继承问题 内部类和嵌套类 使 委托代替多继承 数据类 Pair和Triple 数据类的约定与使 多继承问题
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • mobaxterm无法连接vmware虚拟机服务器,network error:connection refused

    场景描述 电脑硬盘换了 重新安装vmware ubuntu mobaxterm 安装完ubuntu后 因为习惯了无UI的界面 所以关闭了ubuntu的桌面服务 有需要的同学可以通过sudo systemctl set default mul
  • 【Java基础】 使用POI解析excel时格式判定问题及解决方案

    写在前面 本文主要介绍在实际开发过程中使用POI工具类去解析Excel格式文件遇到的问题引发的思考 学习以及解决方案 仅供参考 有考虑不周的地方还请指正 问题描述 博主在做excel解析的时候 遇到了一个奇怪的现象 xlsx拓展名的文件使用
  • Struts2知识汇总二

    Struts2中的调试 在Struts2中可以使用