[原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.jason.struts2.model; import java.util.Date; /*
*
*
* */
public class Manager { private String name;
private Date birth; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} @Override
public String toString() {
return "Manager [name=" + name + "]";
} }
Manager
package com.jason.struts2.model; /*
* 1.Department 是模型,实际录入的Department, deptName, 可以直接写入;manager 属性的处理?
* Struts2 表单标签的name 值可以被赋为属性的属性:name=manager.name / name=manager.birth
*
* 3.manager 中有一个Date 类型的birth 属性,Struts2 是否能完成自动的转换?
*
* 全局的类型转换器可以正常工作
*
* */
public class Department {
private Integer id;
private String deptName; private Manager manager; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getDeptName() {
return deptName;
} public void setDeptName(String deptName) {
this.deptName = deptName;
} public Manager getManager() {
return manager;
} public void setManager(Manager manager) {
this.manager = manager;
} @Override
public String toString() {
return "Department [id=" + id + ", deptName=" + deptName + ", manager="
+ manager + "]";
} }
Department
package com.jason.struts2.model; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class TestComplexPropertyAction extends ActionSupport implements ModelDriven<Department>{ /**
* @Fields:serialVersionUID
*/
private static final long serialVersionUID = 1L;
private Department department; @Override
public Department getModel() {
department = new Department();
return department;
} @Override
public String execute() throws Exception {
System.out.println(department);
return "success";
} }
TestComplexPropertyAction
package com.jason.strut2.conversion; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map; import javax.servlet.ServletContext;
import javax.xml.crypto.Data; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.StrutsTypeConverter; import com.opensymphony.xwork2.ActionContext;
import com.sun.jndi.url.dns.dnsURLContext; public class DateConverter extends StrutsTypeConverter { private DateFormat dateFormat; public void setDateFormat(DateFormat dateFormat) {
//获取当前web应用下的初始化参数 ServletContext servletContext = ServletActionContext.getServletContext();
String pattern = servletContext.getInitParameter("datePattern");
dateFormat = new SimpleDateFormat(pattern); } public DateFormat getDateFormat() {
return dateFormat;
} @Override
public Object convertFromString(Map context, String[] values, Class toClass) { System.out.println("convertFromString ... ");
if(toClass == Data.class){
if(values != null && values.length > 0){
String value = values[0];
try {
return getDateFormat().parseObject(value);
} catch (ParseException e) { e.printStackTrace();
}
}
}
//若没有转换成功,则返回values
return values;
} @Override
public String convertToString(Map context, Object o) {
System.out.println("convertToString ...");
if( o instanceof Date){
Date date = (Date) o;
return getDateFormat().format(date);
}
//若转换失败,则返回null
return null;
} }
DateConverter
java.util.Date=com.jason.strut2.conversion.DateConverter
xwork-conversion.properties
<context-param>
<param-name>datePattern</param-name>
<param-value>yyyy-MM-dd hh:mm:ss</param-value>
</context-param>
web.xml
<action name="testComplexPropertyAction" class="com.jason.struts2.model.TestComplexPropertyAction">
<result>/success.jsp</result>
</action>
strut.xml
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body> <s:form action="testComplexPropertyAction">
<s:textfield name="deptName" label="DeptName"></s:textfield>
<!-- 映射属性的属性 -->
<s:textfield name="manager.name" label="ManagerName"></s:textfield>
<s:textfield name="manager.birth" label="ManagerBirth"></s:textfield> <s:submit></s:submit>
</s:form> </body>
</html>
complex-property.jsp
核心点:
1.struts 的表单标签支持:映射属性的属性
<s:form action="testComplexPropertyAction">
<s:textfield name="deptName" label="DeptName"></s:textfield>
<!-- 映射属性的属性 -->
<s:textfield name="manager.name" label="ManagerName"></s:textfield>
<s:textfield name="manager.birth" label="ManagerBirth"></s:textfield> <s:submit></s:submit>
</s:form>
2.通过配置全局的:类型转换类,和配置。进行类型自动的转换
xwork-conversion.properties
java.util.Date=com.jason.strut2.conversion.DateConverter
[原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用的更多相关文章
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java后台处理框架之struts2学习总结
Java后台处理框架之struts2学习总结 最近我在网上了解到,在实际的开发项目中struts2的使用率在不断降低,取而代之的是springMVC.可能有很多的朋友看到这里就会说,那还不如不学str ...
- 学习笔记:CentOS7学习之十九:Linux网络管理技术
目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...
- 学习笔记:CentOS7学习之二十:shell脚本的基础
目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...
- 学习笔记:CentOS7学习之十七: Linux计划任务与日志的管理
目录 学习笔记:CentOS7学习之十七: Linux计划任务与日志的管理 17.1 计划任务-at-cron-计划任务使用方法 17.1.1 at计划任务的使用 17.1.2 查看和删除at将要执行 ...
- HTML+CSS学习笔记 (6) - 开始学习CSS
HTML+CSS学习笔记 (6) - 开始学习CSS 认识CSS样式 CSS全称为"层叠样式表 (Cascading Style Sheets)",它主要是用于定义HTML内容在浏 ...
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
随机推荐
- Ext TabPanel items高度宽度自适应
写Ext的时候经常会遇到一些莫名其妙,令人感到非常神奇的问题,甚至都没办法用语言去描述它,搞的人想请教一下百度或Google都不知道该去怎么问,简直能够令人发疯.先来看张截图吧. 有没有注意到里面的G ...
- strcpy 和 strnpy 区别
与strncpy的区别 第一种情况: 1 2 3 4 char* p="how are you ?"; char name[20]="ABCDEF ...
- mysql-zabbix-agent
使用Zabbix监控MySQL服务器方法 01/27/2014 从Zabbix 2.2开始,Zabbix官方已经支持了MySQL监控,但是MySQL监控默认是不可用的,需要经过额外的设置才可以使用.K ...
- js 判断js函数、变量是否存在
//是否存在指定函数 function isExitsFunction(funcName) { try { if (typeof(eval(funcName)) == "function&q ...
- SVN hooks强制提交时填写日志
#!/bin/bash REPOS="$1" TXN="$2" #svnlook路径 SVNLOOK=/usr/bin/svnlook #通过svnlook获取 ...
- SQL SERVER中非聚集索引的覆盖,连接,交叉,过滤
1.覆盖索引:select和where中包含的结果集中应存在“非聚集索引列”,这样就不用查找基表了,索引表即可搞定: 2.索引交叉:索引的交叉可以理解成建立多个非聚集索引之间的join,如表实体一 ...
- linux 多个ssh key 登录远程主机
登录A主机使用分配的sshkey需要指定特定的key,ssh -i ~/.ssh/xxx_id_rsa_privatekey username@host , 指定key后登录提示: Agent ...
- c#中匿名函数lamb表达式
c#中匿名函数lamb表达式 实例一:(其实,这样都是些语法糖) using System; using System.Collections.Generic; using System.Linq; ...
- CSS布局一
CSS布局一 实例一(居中) div#container{ width:960px; height:650px; margin:0 auto; border:1px solid #ccc; /*就是说 ...
- logback的配置和使用
1. logback介绍 logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback-classic和logback-acce ...