时间

来源:互联网 发布:欧洲有4g网络吗 编辑:程序博客网 时间:2024/06/10 08:46

SimpleDateFormate的Bug

String date="2012-02-30";DataFormate df=new SimpleDataFormate("yyyy-MM-dd");System.out.println(df.parse(date));

这样SimpleDataFormate给解析了 虽然变成了3月1日 但是不好
String date="2012-02-30"DateLocaleConverter df=new DateLocalConverter();System.out.println(df.convert(date));

这样会抛异常


formBean

package com.itheima.web.formbean;import java.util.HashMap;import java.util.Map;import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;//FormBean:与用户的输入对应//验证用户的输入public class UserFormBean {private String username;private String password;private String repassword;private String birthday;private String email;//封装错误信息key=输入域的名称 value=错误消息private Map<String, String> errors = new HashMap<String, String>();public Map<String, String> getErrors() {return errors;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRepassword() {return repassword;}public void setRepassword(String repassword) {this.repassword = repassword;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}//验证public boolean validate(){boolean isOk = true;/* * username:不能为空,且必须是3~8位的字母 * password:不能为空,且必须是3~8为的数字 * repassword:必须与password一致 * birthday:必须是一个日期类型 * email:必须符合email的书写规范 */if(username==null||username.trim().equals("")){isOk = false;errors.put("username", "用户名不能为空");}else{if(!username.matches("[a-zA-Z]{3,8}")){isOk = false;errors.put("username", "用户名必须是3~8位的字母");}}if(password==null||password.trim().equals("")){isOk = false;errors.put("password", "密码不能为空");}else{if(!password.matches("\\d{3,8}")){isOk = false;errors.put("password", "密码必须是3~8位的数字");}}//if(repassword!=null){if(!password.equals(repassword)){isOk = false;errors.put("repassword", "两次密码必须一致");}//}if(birthday!=null){try{DateLocaleConverter df = new DateLocaleConverter();df.convert(birthday);}catch(Exception e){isOk = false;errors.put("birthday", "请输入正确的日期");}}if(email!=null){if(!email.matches("\\w+@\\w+(\\.\\w+)+")){isOk = false;errors.put("email", "请输入正确的邮箱");}}return isOk;}}


package com.itheima.util;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.commons.beanutils.BeanUtils;//把请求对象中的数据填充到formbean中public class FillFormBean {public static <T> T toFromBean(HttpServletRequest request,Class<T> clazz){try{T bean = clazz.newInstance();Map params = request.getParameterMap();//获取所有form表单中的提交BeanUtils.populate(bean, params);//封装到bean中return bean;}catch(Exception e){throw new RuntimeException(e);}}}

package com.itheima.web.controler;import java.io.IOException;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.ConvertUtils;import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;import com.itheima.domain.User;import com.itheima.exception.UserExistsException;import com.itheima.service.UserService;import com.itheima.service.impl.UserServiceImpl;import com.itheima.util.FillFormBean;import com.itheima.web.formbean.UserFormBean;//处理用户注册public class RegistServlet extends HttpServlet {private UserService service = new UserServiceImpl();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1、验证用户输入//1。1把请求中的数据封装到一个FormBean中UserFormBean formBean = FillFormBean.toFromBean(request,UserFormBean.class);if(!formBean.validate()){//2、验证不通过,跳转到输入页面。回显用户原来写的数据request.setAttribute("formBean", formBean);request.getRequestDispatcher("/WEB-INF/pages/regist.jsp").forward(request, response);return;}//3、验证通过:填充模型try{User user = new User();ConvertUtils.register(new DateLocaleConverter(), Date.class);//注册一个类型转换器,完成String类型的birthday到Date类型的BirthdayBeanUtils.copyProperties(user, formBean);//基本数据类型和String类型//4、转换有错,给出提示。转向一个全局的消息页面service.register(user);request.setAttribute("message", "注册成功,3秒后转向主页!<meta http-equiv='Refresh' content='3;URL="+request.getContextPath()+"/index.jsp'");request.getRequestDispatcher("/message.jsp").forward(request, response);}catch(UserExistsException e){//5、用户存在:UserExistsException//回显数据,并提示用户用户名已经存在formBean.getErrors().put("username", "用户名已经存在");request.setAttribute("formBean", formBean);request.getRequestDispatcher("/WEB-INF/pages/regist.jsp").forward(request, response);}catch(Exception e){request.setAttribute("message", "注册失败");request.getRequestDispatcher("/message.jsp").forward(request, response);}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}User user=new User(); ConvertUtils.register(new DateLocalConverter(),Date.class);//注册一个类型转换器 完成 BeanUtils.copPropertids()的birthday stirng类型不能项date转换的问题 这样就可以了  
BeanUtils.copyProperties(user,formbean);将bean中的属性值 赋值到user中的属性值 名字要一致 类型是 8中基本数据类型 相互转化

User 中的 birthday是 Date的

formbean中的birthday 是 String


原创粉丝点击