2017-10-16 7 views
0

저는 스프링 mvc 4.3.8 및 스프링 웹 플로우 2.4.5와 함께 thymeleaf 3.x와 함께 작업하고 있습니다. 유효성 검사가 실패한 후 jsr-303 annotations에서 오류 메시지가 표시되지 않습니다. 뷰 자체가 다시 렌더링되는 동안 오류 메시지는 표시되지 않습니다. 그 밖의 무엇을해야합니까? 도와주세요.스프링 웹 플로우 : jsr 303 유효성 확인과 함께 오류 메시지를 표시 할 수 없습니다.

<!-- WebFlow Configuration --> 
    <bean id="viewFactoryCreator" 
     class="org.springframework.webflow.mvc.builder.MvcViewFactoryCreator"> 
     <property name="viewResolvers" ref="viewResolver" /> 
    </bean> 

    <webflow:flow-builder-services id="flowBuilderServices" 
     view-factory-creator="viewFactoryCreator" validator="validator"/> 

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

    <webflow:flow-registry id="flowRegistry" 
     flow-builder-services="flowBuilderServices" base-path="/WEB-INF/spring/flows"> 
     <webflow:flow-location id="add-locale" path="/locale-flow.xml" /> 
    </webflow:flow-registry> 

    <!-- the flow executor drives the execution of the flow --> 
    <webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry"/>  

    <!-- Enables FlowHandler URL mapping. 
     This handler adapter is the bridge between DispatcherServlet and the flow executor --> 
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter"> 
     <property name="flowExecutor" ref="flowExecutor" /> 
    </bean> 

    <!-- Maps request paths to flows in the flowRegistry. 
     Tells DispatcherServlet to send flow requests to the FlowHandlerAdapter --> 
    <bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> 
     <property name="flowRegistry" ref="flowRegistry" /> 
     <property name="order" value="0" /> 
    </bean> 

로케일 flow.xml

<input name="id"/> 

    <on-start> 
    <evaluate expression="localeController.newLocaleForm(id)" result="flowScope.localeForm" /> 
    </on-start> 

    <view-state id="localeForm" view="locale/locale-form-p1" model="flowScope.localeForm"> 
    <transition on="next" to="configureMessageBundle"/> 
    </view-state> 

    <view-state id="configureMessageBundle" view="locale/locale-form-p2" model="flowScope.localeForm" /> 
    <view-state id="returnToViewPage" view="externalRedirect:locale-page.html" /> 

백킹 형태 콩, LocaleForm.java

@NotNull(message = "Locale cannot be blank") 
    private String code; 

    @NotBlank(message = "Name cannot be blank") 
    @Size(min = 3, max = 255, message = "Name must be between 3 and 255 characters") 
    @Pattern(regexp = "^[\\w-_]+$", message = "Name can contain only alphabets, numbers, hypen and underscore") 
    private String name; 

형태 뷰 페이지, 로케일 폼 p1.html

<form class="form-horizontal" th:action="${flowExecutionUrl}" th:object="${localeForm}" method="post" enctype="multipart/form-data"> 
       <div class="form-group"> 
        <label class="control-label col-xs-2">Locale</label> 
        <div class="col-xs-10"> 
        <select class="selectpicker form-control" tabindex="0" th:field="*{code}"> 
         <option value="en_US" th:each="locale : *{availableLocales}" 
          th:value="${locale.key}" 
          th:text="${locale.value}">English (US)</option> 
        </select> 
        </div> 
       </div> 
       <div class="form-group required"> 
        <label class="control-label col-xs-2"> 
        Name <a role="button" data-toggle="popover" data-trigger="hover" data-html="true" title="" data-content="Provide a unique name for the Locale." data-placement="top"><span class="fa fa-info-circle"></span></a> 
        </label> 
        <div class="col-xs-10" th:classappend="${#fields.hasErrors('name')}? has-error"> 
        <input class="form-control" type="text" placeholder="Name" th:field="*{name}" > 
        <span class="help-block" th:unless="${#fields.hasErrors('name')}">Allowed characters are alphabets, numbers, hyphen and underscore.</span> 
        <span class="help-block" th:errors="*{name}"></span> 
        </div> 
       </div> 
<div class="form-group"> 
       <div class="col-xs-2 col-xs-offset-2"> 
       <button class="btn btn-primary btn-sm btn-primary-spacing" type="submit" name="_eventId_next">Next</button> 
       <button class="btn btn-default btn-sm" type="button" up-href="locale-page.html" up-target="#page-content">Cancel</button> 
       </div> 
      </div> 
      </form> 

답변

1

해결되었습니다. Spring Web Flow는 피드백 메시지를 사용자에게 제공하는 다른 방법을 가지고 있음이 밝혀졌습니다. Spring Web Flow reference documentation에는 "Spring Web Flow의 MessageContext는 플로우 실행 과정에서 메시지를 기록하는 API입니다."

<div class="form-group required"> 
    <label class="control-label col-xs-2"> 
     Name <a role="button" data-toggle="popover" data-trigger="hover" data-html="true" title="" data-content="Provide a unique name for the Locale." data-placement="top"><span class="fa fa-info-circle"></span></a> 
    </label> 
    <div class="col-xs-10" th:classappend="${#arrays.length(flowRequestContext.messageContext.getMessagesBySource('name'))>0}? has-error"> 
     <input class="form-control" type="text" placeholder="Name" th:field="*{name}" > 
     <span class="help-block" th:if="${#arrays.isEmpty(flowRequestContext.messageContext.getMessagesBySource('name'))}">Allowed characters are alphabets, numbers, hyphen and underscore.</span> 
     <p class="help-block" th:each="err : ${flowRequestContext.messageContext.getMessagesBySource('name')}" th:text="${err.text}">Input is invalid</p> 
    </div> 
    </div>