2014-09-11 103 views
1

我尝试在我的jsp文件中显示错误消息,但没有奏效。我无法使用JSR303显示错误消息@Valid

这里我的模型类,命名EmployeeEntity.java

@Entity 
@Table(name="EMPLOYEE") 
public class EmployeeEntity 
{ 
    @Id 
    @Column(name="ID") 
    @GeneratedValue 
    private Integer id; 

    @Column(name="FIRSTNAME") 
    private String firstname; 

    @Column(name="LASTNAME") 
    private String lastname; 

    @NotEmpty 
    @Column(name="ADDRESS") 
    private String address; 

    @Column(name="EMAIL") 
    private String email; 

    @Column(name="TELEPHONE") 
    private String telephone; 

    @Column(name="USERNAME") 
    private String username; 

    @Column(name="PASSWORD") 
    private String password; 


    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public String getTelephone() { 
     return telephone; 
    } 

    public void setTelephone(String telephone) { 
     this.telephone = telephone; 
    } 
} 

这里我的jsp页面

<form:form method="post" commandName="employeeEntity" action="add"> 
<form:errors path="*" cssClass="errorblock" element="div" /> 
<div class="panel panel-primary"> 
    <div class="panel-heading"> 
     Employee Register Form 
    </div> 
    <div class="panel-body"> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.firstname" /> 
      </label> 
      <div class="col-lg-10"> 
       <form:input path="firstname" class="form-control" placeholder="first name" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.lastname"/> 
      </label> 
      <div class="col-lg-10"> 
       <form:input path="lastname" class="form-control" placeholder="last name" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.address"/> 
      </label> 
      <div class="col-lg-10"> 
       <form:textarea rows="5" path="address" class="form-control" placeholder="address" /> 
       <form:errors path="address" cssClass="error" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.gender"/> 
      </label> 
      <div class="col-lg-10"> 
       <label class="label-radio"> 
        <form:radiobutton path="gender" value="male"/> 
        Male 
       </label> 
       <label class="label-checkbox"> 
        <form:radiobutton path="gender" value="female" /> 
        Female  
       </label> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.email"/> 
      </label> 
      <div class="col-lg-10"> 
       <form:input path="email" class="form-control" placeholder="email" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.phonenumber"/> 
      </label> 
      <div class="col-lg-10"> 
       <form:input path="telephone" class="form-control" placeholder="phone number" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.username"/> 
      </label> 
      <div class="col-lg-10"> 
       <form:input path="username" class="form-control" placeholder="username" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-lg-2 control-label"> 
       <fmt:message key="label.password"/> 
      </label> 
      <div class="col-lg-10"> 
       <form:password path="password" class="form-control" placeholder="password" /> 
       <span class="help-block"></span> 
      </div> 
     </div> 
    </div> 
    <div class="panel-footer"> 
     <input type="submit" class="btn btn-primary" value="<fmt:message key="button.submit" />" /> 
     <input type="reset" class="btn btn-warning" value="<fmt:message key="button.reset" />" /> 
    </div> 
</div> 

这里是我的xml文件

<context:annotation-config /> 
<context:component-scan base-package="com.howtodoinjava.controller" /> 

<mvc:annotation-driven /> 
<mvc:resources mapping="/css/**" location="/css/" /> 
<mvc:resources mapping="/js/**" location="/js/" /> 


enter code here 
<bean id="jspViewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/view/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<bean id="messageSource" 
    class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="messages" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
</bean> 

<bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    p:location="/WEB-INF/jdbc.properties" /> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close" p:driverClassName="${jdbc.driverClassName}" 
    p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
      <prop key="hibernate.show_sql">true</prop> 
     </props> 
    </property> 
</bean> 

<bean id="employeeDAO" class="com.howtodoinjava.dao.EmployeeDaoImpl"></bean> 
<bean id="carDAO" class="com.howtodoinjava.dao.CarDaoImpl"></bean> 

<bean id="employeeManager" class="com.howtodoinjava.service.EmployeeManagerImpl"></bean> 
<bean id="carManager" class="com.howtodoinjava.service.CarManagerImpl"></bean> 

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

,这里是我的控制器类

@RequestMapping(value = "registerForm/add", method = RequestMethod.POST) 
public String addEmployee(@Valid EmployeeEntity employee, BindingResult result){ 
    if(result.hasErrors()) { 
     return "redirect:/registerForm/form"; 
    } else { 
     employeeManager.addEmployee(employee); 
     return "redirect:/list"; 
    } 
} 

我希望你能帮助我,我'新的春天冬眠

感谢, 问候

回答

0

问题解决了..

我有更新我的问题,包括我的jsp页面,并在那里的问题。

我无法显示我的错误消息,因为<form:form>标记中的commandName不适用于我的模型类名称中的camelcase。所以,我从“员工”转变为“employeEntity”

我发现从this link

希望回答这个问题,帮助你太家伙...

0

你需要有一个验证器类(如EmployeeValidator),它实现了包含验证逻辑的接口org.springframework.validation.Validator。除此之外,你需要的是验证绑定在你的addEmployee方法像以下定义控制器类:

比方说,你宣布经由控制器类的变量employeeValidator(你可以通过让自动装配它在声明的EmployeeValidator你的beans config xml),那么你需要像下面那样绑定控制器类中的验证器。

@InitBinder 
private void initBinder(WebDataBinder binder) { 
    binder.setValidator(employeeValidator); 
} 

然后验证器会自动调用并设置BindingResult中的错误(即导致您的方法签名)。

写作的验证器实现检查以下链接:

Spring MVC Form Validation Example using Annotation and Custom Validator implementation

Validation Framework in Spring with Example

希望它能帮助。

+0

是它仍然需要验证器类,如果我只是会给“ “ADDRESS”属性中的“非空”约束?对不起,谢谢你的回答。 – Pras 2014-09-11 13:39:43

+0

你有没有机会调试'if(result.hasErrors()){..}'来查看它是否返回true? – 2014-09-12 15:27:46

+0

是的。否则,如果块阻止正常工作。我的意思是当我在email字段中输入空值时,它会进入IF块,但是当我在地址字段中输入某些内容时,它会进入ELSE块。这是你的意思? @Uresh。感谢您在 – Pras 2014-09-13 04:20:10