2017-10-16 4 views
0

Ich arbeite mit Feder mvc 4.3.8 und Feder webflow 2.4.5 zusammen mit Thymoleaf 3.x. Ich bin nicht in der Lage, die Fehlermeldungen von jsr-303-Annotationen zu erhalten, die mit spring webflow angezeigt werden, nachdem die Validierung fehlgeschlagen ist. Während die Ansicht selbst gerendert wird, werden keine Fehlermeldungen angezeigt. Was muss ich noch tun? Bitte helfen Sie.Spring Webflow: Kann keine Fehlermeldungen mit JSR 303 Validierungen

<!-- 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> 

locale-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" /> 

Die Trägerform bean, 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; 

Die Form Ansichtsseite, locale-form-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> 

Antwort

1

Gelöst es. Es stellt sich heraus, dass Spring Web Flow eine andere Möglichkeit bietet, dem Benutzer Rückmeldungen zu geben. Die Spring Web Flow reference documentation sagt: „Spring Web Flow Message ist eine API für Nachrichten im Verlauf der Strömung Hinrichtung Aufnahme“.

<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> 
Verwandte Themen