我正在使用spring mvc 4.3.8和spring webflow 2.4.5以及thymeleaf 3.x.在验证失败后,我无法从spring webflow显示的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>
<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" />
@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;
<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>
答案 0 :(得分: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>