[原创]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 ...
随机推荐
- 【转】HideInInspector 与SerializeField
http://blog.csdn.net/luyuncsd123/article/details/21563697 [HideInInspector]表示将原本显示在面板上的序列化值隐藏起来. [Se ...
- linux shell工具集合
1)判断进程是否存在,如果不存在再执行启动命令,可以避免一个脚本同时启动多份 if [ $(ps -ef |grep bastion_account.sh|grep -v grep|wc -l) - ...
- Qt持久性对象进行序列化
Mfc和Java中自定义类的对象都可以对其进行持久性保存,Qt持久性对象进行序列化当然也是必不可少的.不过这个问题还真困扰了我很长时间……Mfc通过重写虚函数Serialize().Java则是所属的 ...
- Eclipse中直接双击执行bat时路径问题
之前bat中使用的是 cd %cd% 这样在文件夹中直接运行bat是没问题的 但在eclipse中运行, 取得的路径就是eclipse.exe的所在路径 而如果需要获得bat文件的实际所在路径 应该使 ...
- [LeetCode] Letter Combinations of a Phone Number(bfs)
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- 如何解决jQuery Validation针对动态添加的表单无法工作的问题?
为了充分利用ASP.NET MVC在服务端呈现HTML的能力,在<利用动态注入HTML的方式来设计复杂页面>一文中介绍了,通过Ajax调用获取HTML来呈现复杂页面中某一部分界面的解决方案 ...
- linux bq20z75 驱动
新的项目中使用到了电池.电池的guage使用TI的bq20z75.kernel的驱动中已经有bq20z75的驱动,只要稍加修改就可以使用. 参考链接 http://www.ti.com/lit/er/ ...
- JDK的安装!力求简单明了!
作为一个java语言的开发人员,第一件事就是安装JDK,就像当兵的要有刀枪,学生要有书本纸笔一样!话不多说,配置如下: 1.下载一个JDK安装包,解压到任意目录,我解压的是:C:\Tools\Java ...
- ByteBuffer
1.堆内:HeapByteBuffer,在java的堆内创建. 缺点:可能引起堆的不断gc 写文件的时候需要先将堆的buffer写进直接buffer里,然后再写入文件 2.堆外:DirectByteB ...
- GCD Demo (先存起来自己看)
// 原代码块一 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 原代码块二 N ...