Не могу понять, почему валидация Spring Web Flow не работает должным образом - PullRequest
0 голосов
/ 04 марта 2019

Я проверил свой поток регистрации с помощью Spring Web Flow в соответствии с этим видео, но я не могу понять, почему он не работает.У меня есть bean-компонент проверки:

 @Bean
public LocalValidatorFactoryBean validatorFactoryBean(){
    return new LocalValidatorFactoryBean();
}

Также я добавил его в свой построитель потока:

 @Bean
public FlowBuilderServices flowBuilderServices() {
    return getFlowBuilderServicesBuilder().setValidator(new LocalValidatorFactoryBean())
            .setViewFactoryCreator(mvcViewFactoryCreator()).setValidator(validatorFactoryBean())
            .setDevelopmentMode(true).build();
}

Я использую Hibernate как ORM, поэтому я добавил Hibernate Validator в pom.xml

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.1.Final</version>
    </dependency>

Мой код потока:

  <var name="user" class="entity.User"/>
 <input name="data" type="java.lang.Boolean"/>
 <view-state id="registratingForm" view="/WEB-INF/pages/registration.jsp" 
 model="user" >
<on-entry>
<evaluate expression="orderFlowService.check()" result="data" />
 </on-entry>
    <transition on="submit" to="saveUser" validate="true" >
        <evaluate expression="userServiceImpl.validateImg(requestParameters.photos,user)" result="user" />
    </transition>

</view-state>

<decision-state id="checking" >
    <if test="orderFlowService.check()" then="fromBaseFlow" 
else="userRegistrated"  />
</decision-state>

<action-state id="saveUser">
    <evaluate expression="userServiceImpl.add(user)"/>
    <transition to="checking" />
</action-state>
<end-state id="userRegistrated" view="/index.jsp">

</end-state>
<end-state id="fromBaseFlow" view="externalRedirect:contextRelative:/base- 
flow" />
</flow>

Код моего объекта:

  @Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "idUsers")
private int id;
@Column(name = "login")
@Size(min = 3, max = 15,message = "Неправильний розмір")
@NotEmpty(message = "Не може бути пустим!")
private String login;
@Size(min = 6,message = "Неправильний розмір")
@NotEmpty(message = "Не може бути пустим!")
@Column(name = "password")
private String password;
@NotNull(message = "Не може бути пустим!")
@Column(name = "email")
private String email;
@Column(name = "photo")
private String path;
@Column(name = "about")
private String about;

МОЙ код JSP:

  <form:form modelAttribute="user" enctype="multipart/form-data">
    <table>
        <tr>
            <td><form:label path="login">Логін:</form:label></td>
            <td><form:input path="login"/> <form:errors path="login" cssClass="isa_error"/>   <sf:errors path="login" cssClass="isa_warning" /></td>
        </tr>
        <tr>
            <td><form:label path="password">Пароль:</form:label></td>
            <td><form:password path="password"></form:password><form:errors path="password" cssClass="isa_error" /> </td>
        </tr>
        <tr>
            <td><form:label path="email">Пошта(електронна):</form:label></td>
            <td><form:input path="email"/> <form:errors path="email" cssClass="isa_error"/></td>

        </tr>
        <tr>
          <td><form:label path="about">Опис</form:label></td>
            <td><textarea name="about" cols="40" rows="10">Введіть опис сюди!</textarea></td>
        </tr>
        <tr>
            <td>Аватар:</td>
            <td><input  id="photos" name="photos" type="file" ></td>

        </tr>
        <tr>
            <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/>
            <td><input  type="submit" value="Додати" name="_eventId_submit" ></td>
        </tr>
      <tr>
          <td><form:errors cssClass="isa_error" delimiter=""/> </td>

      </tr>
    </table>
<p>
    <a href="/index.jsp" class="button">На головну!</a>

</p>

Если я оставил свои входные данные пустыми, это исключение произойдет:

 javax.validation.ConstraintViolationException: Validation failed for classes 
[entity.User] during persist time for groups 
[javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='Неправильний розмір', 
propertyPath=login, rootBeanClass=class entity.User, 
messageTemplate='Неправильний розмір'}
ConstraintViolationImpl{interpolatedMessage='Не може бути пустим!', propertyPath=login, rootBeanClass=class entity.User, messageTemplate='Не може бути пустим!'}
]

Моя проверка должна перенаправить меня на текущую страницу с сообщениями, такими как ('Can't be null'), как в видео выше,но вместо этого он выдает исключение с ошибками проверки.

...