2013-12-11 2 views
2

У меня есть форма, которую я проверяю с помощью интерфейса Spring Validator. Подтверждение касается только полей в моей форме. У меня нет проблем с этим, но то, что я хочу сделать, и я не знаю, как действовать, - это вызвать в моем контроллере метод службы, и если этот метод вернет определенное значение, вернитесь на страницу формы и покажите сообщение об ошибке на странице jsp.validation spring service layer

Validator:

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 особенность весны:

Setup ваш 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; 
    } 
} 

Также вы можете взглянуть на этом отправном проекте Java, где вы можете видеть, как взаимодействуют уровни:

https://github.com/majusko/GeneralJavaRest

Смежные вопросы