2013-12-11 168 views
2

我有一个表单,可以通过实现Spring Validator接口进行验证。 验证只涉及我的表单中的字段。我没有这个问题,但是我想要做什么,我不知道如何继续就是在我的控制器中调用一个服务方法,如果这个方法返回一个特定的值,返回到表单页面并显示错误消息在jsp页面中。验证弹簧服务层

验证:

public class TrunkValidator implements Validator{ 

@Override 
public boolean supports(Class<?> clazz) { 
    return Trunk.class.equals(clazz); 
} 

public void validate(Object obj, Errors errors) { 
    Trunk trunk = (Trunk) obj; 

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "compagnyName", "field.required", "Nom emtreprise est obligatoire"); 

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pbxName", "field.required", "Nom Pbx est obligatoire"); 


    if (! errors.hasFieldErrors("compagnyName")) { 
     if ("trunk".equals(trunk.getCompagnyName())) 
      errors.rejectValue("compagnyName", "sssss", "déja existant"); 
    }  
    } 
} 

控制器:

@RequestMapping(value = "/createTrunk", method = RequestMethod.POST) 
    protected ModelAndView createTrunk(@Valid Trunk trunk, 
      BindingResult bindingResult) { 
       // form validation 
     if (bindingResult.hasErrors()) { 
      ModelAndView model = new ModelAndView("/jsp/createTrunk.jsp"); 
      model.addObject(ATTRIBUTE_BASE_URL, baseUrl); 
      return model; 
     } else { 

        // if service method retun error message or exception 
        // display form with error message 

     } 
    } 

JSP:

<form:form method="POST" commandName="trunk" action="${baseUrl}/createTrunk"> 
    <form:errors path="*" cssClass="errorblock" element="div" /> 
    <table> 
     <tr> 
      <td>Nom de l'entreprise :</td> 
      <td><form:input path="compagnyName" /></td> 
      <td><form:errors path="compagnyName" cssClass="error" /></td> 
     </tr> 
     <tr> 
      <td>Nom de PBX :</td> 
      <td><form:input path="pbxName" /></td> 
      <td><form:errors path="pbxName" cssClass="error" /></td> 
     </tr> 

     <tr> 
      <td>N° de commande :</td> 
      <td><form:input path="orderNum" /></td> 
      <td><form:errors path="orderNum" cssClass="error" /></td> 
     </tr> 



     <tr> 
      <td>LDI :</td> 
      <td><form:input path="ldi" /></td> 
      <td><form:errors path="ldi" cssClass="error" /></td> 
     </tr> 

     <tr> 
      <td>INSEE :</td> 
      <td><form:input path="insee" /></td> 
      <td><form:errors path="insee" cssClass="error" /></td> 
     </tr> 

回答

0

在控制器中添加@InitBinder

@InitBinder("trunk") 
public void initBinderAll(WebDataBinder binder) { 
     binder.setValidator(new TrunkValidator()); 
} 
0

使用注释和春天@Autowired特点:

设置你的servlet.xml中像这样...

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<context:component-scan base-package="sk.eglu.khl" /> 

<bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/WEB-INF/pages/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

<mvc:resources mapping="/resources/**" location="/resources/mytheme/" /> 

<mvc:annotation-driven /> 

...然后你可以使用标注 - 使创建的界面“TrunkValidator”,并添加到您的服务层的注释是这样的:

public interface TrunkValidatorInt { 

    boolean validate(Object obj, Errors errors); 

} 

@Service 
public class TrunkValidatorImpl implements TrunkValidatorInt { 

    @Override 
    boolean validate(Object obj, Errors errors){ 
     return true; 
    } 

} 

@Controller 
@RequestMapping("/welcome") 
public class HelloWorldController{ 

     @Autowired(required = true) 
     TrunkValidatorInt trunkValidator; 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView helloWorld(){ 

    final ModelAndView model = new ModelAndView("HelloWorldPage"); 

      if(trunkValidator.validate(someValue)){ 
     model.addObject("msg", "good!"); 
      } else { 
     model.addObject("msg", "bad!"); 
      } 
    return model; 
    } 
} 

你也可以对这个项目的出发看看爪哇,你可以看到图层如何沟通:

https://github.com/majusko/GeneralJavaRest