远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

    • Struts2-3概述与MVC模式深度剖析
    • Struts2-3环境准备以及构建第一个Struts2-3的hello-word项目
    • 使用MyEclipse2022-1搭建Maven版本的Struts2-3项目
    • Struts2的类型转换
      • 使用标签
      • 在 Action 中使用 ActionSupport
        • 新增页面
        • 修改 struts.xml 添加校验跳转 input
        • 效果
      • 业务验证
      • 类型转换深入
        • 新建一个 input.jsp
        • Point 对象
        • OGNL 官网
        • 新建一个类型转换器类 PointConverter
        • 新建一个 PointAction 处理类
        • struts.xml 添加处理流程配置:
        • 新增转换器配置
        • output.jsp 显示页面
        • 查看效果
    • Struts2-3的独有特性与StrutsPrepareAndExecute过滤器源码分析
    • Struts2类型转换之单个对象深入研究
    • Struts2类型转换之批量类型转换
    • Struts2类型转换之全局类型转换
    • Struts2自定义方法最佳实践
    • Struts2输入校验剖析之编码方式校验
    • Struts2的Action中自定义方法的输入校验
  • Hibernate

  • Webservice

  • 分布式

  • 分布式框架

  • 后端开发
  • Struts2
terwer
2022-10-30
目录

Struts2的类型转换

# 使用标签

注意:Struts2使用标签库找不到URI:[struts-tags]的taglib[s]问题解决 (opens new window)

新建 login2.jsp​ 文件,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Struts2.3 Login2</title>
</head>
<body>
	<s:form action="login">
		<s:textfield name="username" label="username"></s:textfield>
		<s:textfield name="password" label="password"></s:textfield>
		<s:submit label="submit"></s:submit>
	</s:form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

查看结果:

​

# 在 Action 中使用 ActionSupport

# 新增页面

​login3.jsp​

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Struts2.3 Login3</title>
</head>
<body>
	<s:form action="login3">
		<s:textfield name="username" label="username"></s:textfield>
		<s:textfield name="password" label="password"></s:textfield>
		<s:submit label="submit"></s:submit>
	</s:form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

​LoginAction3.java​

package space.terwer;

import org.apache.commons.lang3.StringUtils;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction3 extends ActionSupport{
	private String username;
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public void validate() {
		if(StringUtils.isBlank(this.getUsername())) {
			this.addFieldError("username", "username required");
		}
		if(StringUtils.isBlank(this.getPassword())) {
			this.addFieldError("password", "password required");
		}
	}

	public String execute() {
		return "success";
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 修改 struts.xml 添加校验跳转 input

​struts.xml​

<!-- 使用ActionSupport -->
<action name="login3" class="space.terwer.LoginAction3">
	<result name="success">/result.jsp</result>
	<result name="input">/login3.jsp</result>
</action>
1
2
3
4
5

# 效果

​

# 业务验证

在 LoginAction2.java​ 的 execute()​ 方法添加验证逻辑

public String execute() {
	if("hello".equals(this.getUsername().trim()) && "world".equals(this.getPassword().trim())){
		return "success";
	}

	this.addFieldError("username", "username or password error");
	return "failer";
}
1
2
3
4
5
6
7
8

在 struts.xml​ 加入跳转逻辑

<!-- 使用ActionSupport -->
<action name="login3" class="space.terwer.LoginAction3">
	<result name="success">/result.jsp</result>
	<result name="input">/login3.jsp</result>
	<result name="failer">/login3.jsp</result>
</action>
1
2
3
4
5
6

效果

​

注意:result.jsp​ 里面的两种写法等价。

username:${requestScope.username}<br /> 
password:${requestScope.password }
1
2
username:<%=request.getParameter("username") %><br /> 
password:<%=request.getParameter("password") %>
1
2

# 类型转换深入

# 新建一个 input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Struts2.3 convert test</title>
</head>
<body>

	<h3 style="color:red;">使用逗号将点的两个坐标分隔开</h3>
	<s:form action="pointConverter">
		<s:textfield name="point" label="point"></s:textfield>
		<s:textfield name="age" label="age"></s:textfield>
		<s:textfield name="username" label="username"></s:textfield>
		<s:textfield name="date" label="birthday"></s:textfield>
	
		<s:submit value="Submit"></s:submit>
	</s:form>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

​

# Point 对象

新建一个 bean​ 为 Point.java​

package space.terwer.bean;

public class Point {
	private Integer x;
	private Integer y;

	public Integer getX() {
		return x;
	}

	public void setX(Integer x) {
		this.x = x;
	}

	public Integer getY() {
		return y;
	}

	public void setY(Integer y) {
		this.y = y;
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# OGNL 官网

https://commons.apache.org/proper/commons-ognl/ (opens new window)

新的官网

https://github.com/apache/commons-ognl (opens new window)

# 新建一个类型转换器类 PointConverter

package space.terwer.converter;

import java.util.Map;

import ognl.DefaultTypeConverter;
import space.terwer.bean.Point;

public class PointConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		if (Point.class == toType) {
			Point point = new Point();

			String[] str = (String[]) value;
			String[] paramValues = str[0].split(",");

			Integer x = new Integer(paramValues[0]);
			Integer y = new Integer(paramValues[1]);

			point.setX(x);
			point.setY(y);

			return point;
		}

		if (String.class == toType) {
			Point point = (Point) value;

			int x = point.getX();
			int y = point.getY();

			String result = "[x=" + x + ", y=" + y + "]";

			return result;
		}

		return null;
	}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 新建一个 PointAction 处理类

package space.terwer.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

import space.terwer.bean.Point;

public class PointAction extends ActionSupport {
	private Point point;
	private Integer age;
	private String username;
	private Date date;

	public Point getPoint() {
		return point;
	}

	public void setPoint(Point point) {
		this.point = point;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

# struts.xml 添加处理流程配置:

<action name="pointConverter" class="space.terwer.action.PointAction">
	<result name="success">/output.jsp</result>
</action>
1
2
3

# 新增转换器配置

必须在当前 Action 同级目录新建 Action类名-conversion.properties​ ,例如:

PointAction-conversion.properties
1

内容为 需要转换的属性名称​ 和 转换器全路径​ ,例如本例子内容如下:

point=space.terwer.converter.PointConverter
1

重启服务器。

特别指出:转换器文件前面必须是Action类名,后缀必须是:

-conversion.properties
1

​

# output.jsp 显示页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>  
  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Point result</title>
</head>
<body>

	point:<s:property value="point" /><br/>
	age:<s:property value="age" /><br/>
	username:<s:property value="username" /><br/>
	date:<s:property value="date" />

</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 查看效果

​

编辑 (opens new window)
#使用#标签#注意#转换#struts#struts2#taglib#convert#validate
上次更新: 2023/02/22, 13:47:25
使用MyEclipse2022-1搭建Maven版本的Struts2-3项目
Struts2-3的独有特性与StrutsPrepareAndExecute过滤器源码分析

← 使用MyEclipse2022-1搭建Maven版本的Struts2-3项目 Struts2-3的独有特性与StrutsPrepareAndExecute过滤器源码分析→

最近更新
01
解决css部分border被圆角切掉之后圆角的边框消失问题
03-18
02
使用TypeScript开发一个自定义的Node-js前端开发脚手架
03-08
03
Github-Actions使用release-please实现自动发版
03-06
更多文章>
Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式