验bean类request2Bean&BeanCopy到..及生成ID

/MVC-example/src/cn/itcast/web/controller/RegisterServlet.java包中

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1    对提交表单的字段进行合法性校验(formbean)
Formbean bean=WebUtils.request2Bean(request, Formbean.class);
boolean b=bean.validate();

以下是上面主程序各方法的具体实现

1.    校验类的定义( Formbean  包 ) :

public class Formbean {
private String username;
private String password;
private String password2;
private String email;
private String birthday;
private Map errorMap=new HashMap();
    
  public String getUsername() {
        return username;
    }
public void setUsername(String username) {
    this.username = username;
}
....................
 public Map getErrorMap() {
    return errorMap;
}
public void setErrorMap(Map errorMap) {
    this.errorMap = errorMap;
}

public boolean  validate(){
    boolean isOk=true;
//校验用户名
if (this.username==null|| this.username.trim().equals("")){
    isOk=false;
    errorMap.put("username", "用户名不能为空!!");
}else{
if(!this.username.matches ("[A-Za-z]{3,8}")){
    isOk=false;
    errorMap.put("username", "用户名必须是3~8位字母");
}
}
//校验密码
if(this.password==null|| this.password.trim().equals("")){
    isOk=false;
    errorMap.put("password", "密码不能为空!!");
}else{
    if(!this.password.matches ("\\d{3,8}")){
    isOk=false;
    errorMap.put("password", "密码必须是3~8位数字");
}
}
//校验确认密码
if(this.password2==null|| this.password2.trim().equals("")){
    isOk=false;
    errorMap.put("password2", "确认密码不能为空!!");
}else{
    if(!(this.password.equals(this.password2))){ //因什么要用equals,而不用==??
    isOk=false;
    errorMap.put("password2", "两次密码要一致");
}
}
//校验email
if(this.email==null|| this.email.trim().equals("")){
isOk=false;
errorMap.put("email", "邮箱不能为空!!");
}else{
if(!this.email.matches( "\\w+@\\w+(\\.\\w+)+")){
isOk=false;
errorMap.put("email", "邮箱必须是合法邮箱地址");
}
}
/ /校验生日
if(this.birthday!=null&&!this.birthday.trim().equals("")){
try{
DateLocaleConverter dlc=new DateLocaleConverter();
dlc.convert(this.birthday, "yyyy-MM-dd");
}catch(Exception e){
isOk=false;
errorMap.put("birthday", "生日日期格式不对!!");
}
}
//校验别名
if(this.nickname==null||this.nickname.trim().equals("")){
isOk=false;
errorMap.put("nickname", "别名不能为空");
}else{
if(!this.nickname.matches ("[\u4e00-\u9fa5]+")){
isOk=false;
errorMap.put("nickname",this.nickname+"呢称必须是汉字!!!");
}
}
return isOk;
}

}

2.   工具类( WebUtils包 ), request2Bean方法     将request数据封装进bean中 

public class WebUtils {
public static  <T> T request2Bean(HttpServletRequest request,  Class<T> beanClass){    //传递的类,与copybean不同
try {
        T formbean=beanClass.newInstance();         //形参 beanClass具体实参由传入的bean类决定
        Enumeration<String> ps=request.getParameterNames();
        while(ps.hasMoreElements()){     //第一种方法
                String name=ps.nextElement();     //获取变量名
                String value=request.getParameter(name);     //获取变量名对应的值
BeanUtils.setProperty(formbean, name, value);    / /想想如何用反射操作
}
return formbean;
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}

另一种方法:
Map map=request. getParameterMap();
BeanUtils.populate(formbean, map); getParameterMap程序运行不成功,问题出在这句话,当map中取到的参数而fornbean没有时,就出错。解决方法,用第一种方法,当 name=ps.nextElement()的参数名formbean没有时,则continue;
return t;

3.    copyBean
public static void copyBean(Object src,Object dest){        // //传递的是对象,为什么呢,不是类
//因生日 date类型,所以要注册转换器,不能直接用SimpleDateFormat,
ConvertUtils.register(new Converter(){         //原形ConvertUtils.register(converter, clazz)
@Override
public Object convert(Class Type, Object value) {
// TODO Auto-generated method stub
if(value==null){
return null;
}
String str=(String) value;
if(str.trim().equals("")){
return null;
}
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}, Date.class);
try {
BeanUtils.copyProperties(dest, src);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
 
4. 生成ID
public static String generateID(){
return UUID.randomUUID().toString();
}
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值