2014-09-11 57 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