Struts2类型转换

发布于 2021-11-13 14:24:02 字数 2946 浏览 749 评论 11

类型转换问题convertToString()始终不执行

转化器:


public class DateConverter extends StrutsTypeConverter {

	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	
	@Override
	@SuppressWarnings("rawtypes")
	public Object convertFromString(Map context, String[] values, Class toClass) {
		Date date = null;
		try {
			date = sdf.parse(values[0]);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		System.out.println("fromstring:"+date);
		return date;
	}

	@Override
	@SuppressWarnings("rawtypes")
	public String convertToString(Map context, Object o) {
		Date d =(Date)o;
		String date = sdf.format(d);
		System.out.println("tostring:"+date);
		return date;
	}

}

属性文件:PersonAction-conversion.properties

person.birthday=com.jqb.struts2lab01.converter.DateConverter

Person类:

public class Person {
	private String name;
	private int age;
	private Date birthday;
    ...
    setter/getter
}

Action:

public class PersonAction extends ActionSupport{
	

	private Person person;
	
	public String execute() {
		return SUCCESS;
	}

	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

}

页面:person.jsp

<%@ 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>

<br><s:property value="person.name"/>
<br><s:property value="person.age"/>
<br><s:property value="person.birthday" />

<form action="personAction" method="post">
<table>
<tr><td>name:</td><td><input type="text" name="person.name"/></td></tr>
<tr><td>age:</td><td><input type="text" name="person.age"/></td></tr>
<tr><td>birthday:</td><td><input type="text" name="person.birthday"/>格式必须为:1998-1-1</td></tr>
<tr><td><input type="reset" value="重置"></td><td><input type="submit" value="提交"></td></tr>
</table>
</form>
</body>
</html>

我就弄不懂了 convertFromString可以正常执行 为什么convertToString就执行不到呢

难道和struts2的默认类型转换器有关么

我发现这个Date类型转换器加和不加没区别只要日期格式出入正确就可以显示

奇了怪了  求大师指点迷津

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

毁梦 2021-11-19 12:06:21
你在页面中请使用struts2自带的<s:property value="attr"/>标签输出值!

自此以后,行同陌路 2021-11-19 12:06:20

有理解错误的请纠正下

秉烛思 2021-11-19 12:06:19

回复
把那一半正常的改成不正常的,你试试?会起作用么?

浮生未歇 2021-11-19 12:06:00

回复
我对单个Date属性测试过OK 没问题 但是放到复杂类型中就不执行convertToString()方法了,很奇怪的 maybe是bug?

无法言说的痛 2021-11-19 12:04:55

回复
要不就是不处理,要不就是用的BeanUtils的默认处理。既然有beanutils的包,那么,应该不会自己去画轮子的。

眼眸 2021-11-19 12:04:37

回复
其实struts2的默认转换器配合他的标签已经很强大了,没必要自己转换器,只是想测试下功能和原理,还是挺希望能解决这个问题的

策马西风 2021-11-19 12:03:12

回复
我的意思是,struts应该是用的beanutils的转换器,那么,只要在beanutils里面注册。不过,楼下给你方案了。我怎么看怎么觉得就是用beanutils的转换器,呵呵。

眉黛浅 2021-11-19 07:59:46

那个配置文件是你自己写的???
你写了转换器,有注册到它所使用的里面么?这种转换貌似是BeanUtils包里做的吧。
ConvertUtils.register
试试这个?好多年不用struts了。

一人独醉 2021-11-19 02:10:31

我试试看,我感觉struts2太聪明了

浅沫记忆 2021-11-18 14:19:43

果然是这样,加个全局转换器就可以了,struts2跳过了我写的方法用自己的了,谢谢了

回忆凄美了谁 2021-11-17 08:55:58

再记录下,页面显示的时候应该是Struts2的标签调用了自身的转换器,而没有再去找之前Action对应的转换器,因为只是一个Date类型的简单数据,而不是自定义的对象,so....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文