一、添加表单验证
1、页面,导入form标签,form上添加modelAttribute属性,信息提示用form:errors标签,对应model属性或boolean方法
……
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
……
<form:form modelAttribute="addUserModel" action="addUser.do" method="post">
……
<td><spring:message code="message.user.userName"/></td>
<td><input id="userName" name="userName" type="text" value="${addUserModel.userName }"/></td>
<td>
<div><form:errors path="userName"/></div>
</td>
……
<div><form:errors path="rePassWord"/></div>
<div><form:errors path="passWordValid"/></div>
……
</form:form>
2、和页面对应的model类
package com.cpkf.notpad.controller.account.model;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.apache.commons.lang.StringUtils;
import org.hibernate.validator.constraints.*;
import com.cpkf.notpad.commons.constants.RegexConstants;
/**
* Filename: AddUserModel.java
* Description: 与页面表单对应的模型对象,在控制器里以
* @Valid @ModelAttribute("addUserModel") AddUserModel addUserModel
* 参数形式出现,绑定表单输入数据
* 在根目录中创建校验提示信息的配置文件 ValidationMessages.properties进行国际化配置
* 这种校验方式局限性大,hibernate本身提供的校验器较少,还必须放在根目录
* Company:
* @author: Jiang.hu
* @version: 1.0
* Create at: May 16, 2011 3:06:45 PM
* modified:
*/
public class AddUserModel {
//@NotEmpty(message="{account.error.userName.required}")
private String userName;
private String nickname;
//@NotEmpty(message="{account.error.email.required}")
//@Email(message="{account.error.email.invalid}")
private String email;
//@Size(min=6,max=12,message="{account.error.passWord.size}")
private String passWord;
private String rePassWord;
private String gender;
private String userProvince;
private String userCity;
private String birthday;
//@Pattern(regexp=RegexConstants.PHONE_REGEX,message="{account.error.phone.invalid}")
private String phone;
private String registTime;
//@AssertTrue(message="{account.error.passWord.confirm}")
public boolean isPassWordValid(){
if(StringUtils.isNotBlank(passWord) && StringUtils.isNotBlank(rePassWord)){
return passWord.equals(rePassWord);
}
return false;
}
……
}
3、控制器
@RequestMapping(value="/addUser.do",method={RequestMethod.GET,RequestMethod.POST})
public String addUser(HttpServletRequest request,HttpServletResponse response,
@Valid @ModelAttribute("addUserModel") AddUserModel addUserModel,
BindingResult errors,
Model model){
//使用注解方式局限大,故而自定义校验器,使用自定义国际化文件
UserValidator userValidator = new UserValidator();
userValidator.addUserValidator(addUserModel, errors);
model.addAttribute("addUserModel", addUserModel);
if(errors.hasErrors()){
logger.info("The parameter is invalid");
return "addUser";
}
return "index";
}
4、校验器
package com.cpkf.notpad.controller.account.validator;
import org.apache.commons.lang.StringUtils;
import org.springframework.validation.BindingResult;
import com.cpkf.notpad.commons.constants.RegexConstants;
import com.cpkf.notpad.controller.account.model.AddUserModel;
public class UserValidator {
public void addUserValidator(Object model,BindingResult errors){
AddUserModel addUserModel = (AddUserModel) model;
if(StringUtils.isBlank(addUserModel.getUserName())){
//参数1-对应的字段名,参数2-国际化文件中对应的key值,参数三-没有找到key时默认的提示信息
errors.rejectValue("userName","account.error.userName.required","userName is required.");
}
if(StringUtils.isBlank(addUserModel.getEmail())){
errors.rejectValue("email", "account.error.email.required", "email is required.");
}
if(StringUtils.isNotBlank(addUserModel.getEmail()) &&
!addUserModel.getEmail().matches(RegexConstants.EMAIL_REGEX)){
errors.rejectValue("email", "account.error.email.invalid", "email is invalid.");
}
if(addUserModel.getPassWord().trim().length() < 6 || addUserModel.getPassWord().trim().length() > 12){
errors.rejectValue("passWord", "account.error.passWord.size", "password must be between 6-12.");
}
if(addUserModel.getRePassWord().trim().length() < 6 || addUserModel.getRePassWord().trim().length() > 12){
errors.rejectValue("rePassWord", "account.error.passWord.size", "password must be between 6-12.");
}
if(StringUtils.isNotBlank(addUserModel.getRePassWord()) &&
!addUserModel.getPassWord().equals(addUserModel.getRePassWord())){
errors.rejectValue("rePassWord", "account.error.passWord.confirm", "enter the password twice inconsistent.");
}
if(StringUtils.isNotBlank(addUserModel.getPhone()) &&
!addUserModel.getPhone().matches(RegexConstants.PHONE_REGEX)){
errors.rejectValue("phone", "account.error.phone.invalid", "phone is invalid.");
}
}
}
二、创建hibernate实体类关系
1、account
package com.cpkf.notpad.entity;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
/**
* Filename: Account.java
* Description: account实体类
* Company:
* @author:
* @version: 1.0
* Create at: May 10, 2011 1:44:50 PM
* modified:
*/
@Entity
@Table(name="account")
public class Account {
/**
* @Id:该类中独特标志
* @Column:对应表中的列
* @GeneratedValue:主键生成策略-自增长
*/
@Id
@Column(name="account_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long accountId;
@Column(name="email")
private String email;
@Column(name="passWord")
private String passWord;
@Column(name="status")
private Boolean status;
//多对多单向,并指定中间表的表明和字段名,中间表自动生成联合组建
//fetch加载方式EAGER-即时加载,LAZY-延迟加载
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="account_role",
joinColumns={@JoinColumn(name="account_id",referencedColumnName="account_id")},
inverseJoinColumns={@JoinColumn(name="role_id",referencedColumnName="role_id")})
private Set<Role> roles = new HashSet<Role>();
//cascade-联级操作,eg:删除account同时删除user
//unique-外键的唯一性
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="user_id",unique=true)
private User user;
……
}
2、role
package com.cpkf.notpad.entity;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
/**
* Filename: Role.java
* Description: 角色类
* Company:
* @author: Jiang.hu
* @version: 1.0
* Create at: May 19, 2011 4:13:53 PM
* modified:
*/
@Entity
@Table(name="role")
public class Role {
@Id
@Column(name="role_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long roleId;
@Column(name="roleName")
private String RoleName;
@Column(name="description")
private String description;
@Column(name="status")
private Boolean status;
//多对多双向
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="role_resource",
joinColumns={@JoinColumn(name="role_id",referencedColumnName="role_id")},
inverseJoinColumns={@JoinColumn(name="resource_id",referencedColumnName="resource_id")})
private Set<Resource> resources = new HashSet<Resource>();
……
}
3、resource
package com.cpkf.notpad.entity;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
/**
* Filename: Resource.java
* Description: 资源类
* Company:
* @author: Jiang.hu
* @version: 1.0
* Create at: May 19, 2011 4:09:41 PM
* modified:
*/
@Entity
@Table(name="resource")
public class Resource {
@Id
@Column(name="resource_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long resourceId;
@Column(name="resourceName")
private String resourceName;
@Column(name="url")
private String url;
@ManyToMany(mappedBy="resources",fetch=FetchType.EAGER)
private Set<Role> roles = new HashSet<Role>();
……
}
4、其余类大同小异,创建好实体类后,启动程序,会自动创建相应表格
分享到:
相关推荐
Maven是Apache软件基金会开发的一款项目管理和集成工具,它通过定义项目对象模型(Project Object Model, POM)来管理项目的构建、报告和依赖关系。在大型项目中,采用模块化设计可以提高代码的可维护性和复用性。...
- 视频教程通常以逐步的方式讲解,从环境配置开始,逐步演示如何创建项目、设置Maven依赖、编写Struts2 Action、设计Hibernate实体、构建Bootstrap表单,以及处理表单提交等步骤。 - 观看者可以跟随视频学习到实际...
在这个Demo中,Maven配置文件(pom.xml)列出了所有必需的库和它们的版本,确保项目的依赖关系得到正确解决。 2. **Spring MVC**: Spring MVC是Spring框架的一部分,它提供了处理HTTP请求和响应的能力。开发者可以...
在SSH2项目中,Maven通过pom.xml文件定义项目的依赖关系,自动下载并管理所需的库,使得项目结构清晰,易于维护和协作。 在实现登录功能的过程中,开发者可能需要以下步骤: 1. **创建Struts2配置**:在struts.xml...
Maven是Java开发中的一个项目管理和综合工具,它可以帮助开发者构建、管理和部署项目。Maven通过使用一种标准的项目对象模型(Project Object Model,POM),能够自动化构建过程,包括编译、测试、打包、部署等步骤...
【标题】"Test-Maven-Webapp.rar" 是一个压缩包,其中包含了使用Maven构建的Java Web应用程序,重点在于实现用户注册功能。这个项目基于Spring框架和MyBatis持久层技术,使用SpringMVC作为控制层来处理HTTP请求。 ...
该项目名为"spring-hibernate-springdata-springmvc-maven-project-framework",是一个综合性的Java开发框架,用于构建基于Spring、Hibernate、Spring Data和Spring MVC的Web应用。它为开发者提供了全面的基础架构,...
**Maven** 是一个项目管理和综合工具,它管理项目的构建、报告和文档,通过POM(Project Object Model)文件来定义项目的配置。Maven简化了构建过程,自动下载依赖,帮助开发者构建符合标准的Java项目。 **EasyUI**...
在本项目中,Spring4可能还包含了Spring MVC,用于构建Web应用的模型-视图-控制器架构,提供了数据绑定、表单验证等功能。 MyBatis是一个轻量级的持久层框架,它将SQL与Java代码分离,允许开发者编写更直观、灵活的...
1. **添加依赖**:首先,你需要在项目中引入Hibernate Validator的依赖库,通常可以通过Maven或Gradle等构建工具来完成。 2. **定义约束**:在你的实体类中,使用注解来定义字段的约束,如`@NotNull`、`@Size(max=10...
Maven是项目管理和构建工具,它管理项目的依赖关系,提供了一套标准的项目结构和生命周期,使得项目的构建、测试和部署更加简单。在本项目中,Maven帮助整合了Spring MVC、Hibernate等库的依赖,并提供了编译、打包...
- 通过koala插件提供的模板,可以快速创建实体类,包括其属性、关联关系等。 2. **配置“列表页面”、“查询条件”、“详情页面”、“新增页面”、“修改页面”**: - 这些页面通常包含了常用的表单控件和操作...
Maven是Java项目管理和构建工具,它通过POM(Project Object Model)文件来管理项目的依赖关系。在本项目中,Maven可能用于下载和管理SSH框架以及其他所需库,同时执行编译、测试、打包等构建任务。 **IntelliJ ...
Maven是一个项目管理和综合工具,它帮助开发者管理项目的构建、报告和文档,通过依赖管理和项目信息管理,使得构建过程标准化。在Struts2、Spring3和Hibernate4的整合中,Maven负责管理这些库的依赖关系,确保项目...
Maven是一个项目管理和综合工具,它管理项目的构建、报告和文档,通过POM(Project Object Model)文件定义项目的依赖关系,自动下载库文件,简化构建过程。Maven有一套标准的目录结构和生命周期,方便开发者进行...
7. **版本控制与构建工具**:项目开发过程中可能会使用Git进行版本控制,Maven或Gradle作为构建工具,确保项目的依赖管理和构建过程自动化。 8. **测试**:为了保证代码质量,项目可能包含JUnit测试用例,用于单元...
`pom.xml`是Maven项目的配置文件,定义了项目的依赖、构建过程等信息,Springboot项目通常使用Maven或Gradle进行构建。 `src`目录是源代码目录,包含了项目的Java源码、资源配置等。 `.git`目录是Git的工作目录,...
在本节 "[SSH+Maven+Bootstrap视频教程]_第十四讲" 中,我们将深入探讨三个重要的IT技术:Struts2(SSH中的S),Spring(SSH中的H)和Hibernate(SSH中的第二个S),以及Maven项目管理和Bootstrap前端框架。...
### Grails框架中文第二版知识点概述 #### 一、简介 **Grails 2.0新特性** 1. **面向开发的特性** - 改进了开发者体验,例如通过简化配置来提高开发效率。 - 引入了新的工具和功能,如Groovy模板引擎Thymeleaf...
- **Maven或Gradle**:可能用于项目的构建、依赖管理和自动化任务,如编译、测试、打包。 以上是对"毕业设计基于JAVAWEB开发的宠物商城系统项目源码"的详细解析,这个项目涵盖了JavaWeb开发的多个方面,是学习和...