本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用

内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。

本人互联网技术爱好者,互联网技术发烧友

微博:伊直都在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 学习之路-- 类型转换与复杂属性配合使用的更多相关文章

  1. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Java后台处理框架之struts2学习总结

    Java后台处理框架之struts2学习总结 最近我在网上了解到,在实际的开发项目中struts2的使用率在不断降低,取而代之的是springMVC.可能有很多的朋友看到这里就会说,那还不如不学str ...

  5. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  6. 学习笔记:CentOS7学习之二十:shell脚本的基础

    目录 学习笔记:CentOS7学习之二十:shell脚本的基础 20.1 shell 基本语法 20.1.1 什么是shell? 20.1.2 编程语言分类 20.1.3 什么是shell脚本 20. ...

  7. 学习笔记:CentOS7学习之十七: Linux计划任务与日志的管理

    目录 学习笔记:CentOS7学习之十七: Linux计划任务与日志的管理 17.1 计划任务-at-cron-计划任务使用方法 17.1.1 at计划任务的使用 17.1.2 查看和删除at将要执行 ...

  8. HTML+CSS学习笔记 (6) - 开始学习CSS

    HTML+CSS学习笔记 (6) - 开始学习CSS 认识CSS样式 CSS全称为"层叠样式表 (Cascading Style Sheets)",它主要是用于定义HTML内容在浏 ...

  9. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

随机推荐

  1. linux命令篇

    普通用户登陆,充值root密码: sudo passwd root

  2. 【转】Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticat

    Warning: mysql_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authenticat 当m ...

  3. ubuntu 64bit arm-linux-gcc: No such file or directory 解决

    通过下面这个解决 ubuntu 64bit  arm-linux-gcc: No such file or directory 安装 sudo apt-get install lsb-core解决 h ...

  4. netstat 查看TCP状态值

    一.TCP 状态值 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' CLOSED:无连接是活动的或正在进行LI ...

  5. Erlang ERTS的Trap机制的设计及其用途

    出处:http://mryufeng.iteye.com/blog/334744 erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到.它的实现需要erl vm的配合.它的 ...

  6. BAT for循环

    一,数字循环 echo off & color 0A for /l %%i in (1,1,10) do ( echo %%i ) pause > nul 输出: 1 2 3 4 5 6 ...

  7. Swift-06-闭包

    看完记不住,只好继续抄课文. 如果某个存储型属性的默认值需要特别的定制或者准备,就可以使用闭包或者全局函数来为其属性提供定制的默认值.每当某个属性所属的新类型实例创建时,对应的闭包或者函数会被调用,而 ...

  8. Fiddler-001-抓包工具初识

    Fiddler 是一个非常简单的网络调试器,也是目前最常用的http抓包工具之一 .通过 Fiddler,我们能够能够记录客户端和服务器之间的所有 HTTP请求,即记录并检查所有你的电脑和互联网之间的 ...

  9. 开始了ecshop

    一个多星期前开始接触ecshop,突然决定要用它来做网站,于是从网上找各种手册与视频,联系官网客服,然后知道官网一共提供三种类型的服务,一种是ecshop授权,不包含任何技术支持,第二种是易开店的标准 ...

  10. 被druid折磨的够呛

    使用德鲁伊数据库连接池 数据源是这么配的 <!--数据源--> <bean id="dataSource" class="com.alibaba.dru ...