在网页date.jsp中提供一个文本框和提交按钮,按照“年-月-日”的形式提交生日,例如:1995-11-10,自定义一个转换器,在网页show.jsp中分别输出年、月、日,并根据当前系统日期显示年龄(实岁),例如:如果当前日期为2015年11月1日,则显示19岁;如果当前日期为2015年11月11日,则显示20岁。
index.jsp
<s:form action="myBirthday" method="post">
<s:textfield name="bir" label="请输入出生日期(XXXX-XX-XX)"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
success.jsp
<body>
<s:property value="bir"/><br>
年: <s:property value="bir.year"/><br>
月:<s:property value="bir.month"/><br>
日:<s:property value="bir.day"/><br>
<br>
年龄:<%=session.getValue("age") %>
</body>
Javabean
public class Birthday {
private String year;
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
private String month;
private String day;
}
action
public class LoginAction extends ActionSupport{
private Birthday bir;
public Birthday getBir() {
return bir;
}
public void setBir(Birthday bir) {
this.bir = bir;
}
public String execute() throws Exception{
Calendar cal = Calendar.getInstance();
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH)+1; //因为Java规定起始时间为1900-0-1;
int dayNow = cal.get(Calendar.DAY_OF_MONTH);
int yearBirth=Integer.parseInt(bir.getYear());
int monthBirth=Integer.parseInt(bir.getMonth());
int dayBirth=Integer.parseInt(bir.getDay());
int age=yearNow-yearBirth;
if(monthNow<=monthBirth){
if(monthNow == monthBirth){
if (dayNow < dayBirth) age--;
}else{
age--;
}
}
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
session.put("age", age);
return "success";
}
}
类型转换器converter
public class MyTypeConverter extends StrutsTypeConverter{
public Object convertFromString(Map arg0,String[] arg1,Class arg2){
Birthday bir=new Birthday();
String[] str=arg1[0].split("-");
bir.setYear(str[0]);
bir.setMonth(str[1]);
bir.setDay(str[2]);
return bir;
}
public String convertToString(Map arg0,Object arg1){
Birthday bir=(Birthday)arg1;
return "["+bir.getYear()+"-"+bir.getMonth()+"-"+bir.getDay()+"]";
}
}
注册器:
bir=com.adam.test.converter.MyTypeConverter
Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="myBirthday" class="com.adam.test.action.LoginAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>