У меня есть небольшой проект (с использованием Spring 4.2.0, Spring Webflow 2.4.2, Hibernate validator 5.2.2), который работает как ожидается в мире сервлетов, но после преобразовывая его в портлет, обратная связь с проверкой в JSP не работает полностью, как ожидалось.Тег ошибки проверки весны не работает полностью с webflow + портлетом
Для такой форме, которая выглядит следующим образом:
<form:form modelAttribute="person" action="${flowExecutionUrl}">
<form:input path="voornaam"/>
....
</form:form>
Это все еще работает в портлет (так я получаю по крайней мере, подтверждение того, что было вызвано моя ошибка проверки):
<form:errors path="*" />
<form:errors path="voornaam" />
Этот надлежащим образом отображает:
<span id="person.errors">may not be empty</span>
<span id="voornaam.errors">may not be empty</span>
Но этот вариант <form:error />
, где содержание в <form:error>
тега должно быть вынесено в случае возникновения ошибок, перестал работать и не визуализируется:
<form:errors path="*">
<p>Should only show in case of any errors</p>
</form:errors>
Некоторые из отладочных сообщений в журнале:
2016-02-23 15:18:36 DEBUG DefaultMessageContext:116 - Resolving message using [[email protected] source = 'voornaam', severity = ERROR, codes = array<String>['person.voornaam.NotBlank', 'voornaam.NotBlank', 'java.lang.String.NotBlank', 'NotBlank'], args = array<Object>[org.springframework.context.support.DefaultMessageSourceResolvable: codes [person.voornaam,voornaam]; arguments []; default message [voornaam]], defaultText = 'may not be empty']
2016-02-23 15:18:37 DEBUG SessionBindingConversationManager:86 - Putting conversation attribute 'scope' with value map['flashScope' -> map['viewUserEventState' -> [[email protected] eventId = 'save', mappingResults = Mapping Results = [[[email protected] mapping = parameter:'execution' -> execution, code = 'propertyNotFound', error = true, errorCause = org.springframework.binding.expression.PropertyNotFoundException: Property not found, originalValue = 'e1s2', mappedValue = [null]], [[email protected] mapping = parameter:'achternaam' -> achternaam, code = 'success', error = false, originalValue = 'Prefab achternaam', mappedValue = 'Prefab achternaam'], [[email protected] mapping = parameter:'tussenvoegsel' -> tussenvoegsel, code = 'success', error = false, originalValue = '', mappedValue = ''], [[email protected] mapping = parameter:'voornaam' -> voornaam, code = 'success', error = false, originalValue = '', mappedValue = '']]], 'messagesMemento' -> map[[null] -> list[[empty]], 'voornaam' -> list[[[email protected] source = 'voornaam', severity = ERROR, text = 'may not be empty']]]]]
2016-02-23 15:18:37 DEBUG AbstractMvcView:194 - Rendering MVC [org.springframework.web.servlet.view.JstlView: unnamed; URL [/WEB-INF/flows/editPersonDetails.jsp]] with model map [{viewUserEventState=[[email protected] eventId = 'save', mappingResults = Mapping Results = [[[email protected] mapping = parameter:'execution' -> execution, code = 'propertyNotFound', error = true, errorCause = org.springframework.binding.expression.PropertyNotFoundException: Property not found, originalValue = 'e1s2', mappedValue = [null]], [[email protected] mapping = parameter:'achternaam' -> achternaam, code = 'success', error = false, originalValue = 'Prefab achternaam', mappedValue = 'Prefab achternaam'], [[email protected] mapping = parameter:'tussenvoegsel' -> tussenvoegsel, code = 'success', error = false, originalValue = '', mappedValue = ''], [[email protected] mapping = parameter:'voornaam' -> voornaam, code = 'success', error = false, originalValue = '', mappedValue = '']]], org.springframework.validation.BindingResult.person=org.springframework.webflow.mvc.view.BindingModel: 1 errors
Field error in object 'person' on field 'voornaam': rejected value [null]; codes []; arguments []; default message [may not be empty], masterData={tussenvoegsel=[, de...]}, currentUser=10201, viewScope=map[[empty]], flowExecutionKey=e1s2, flowExecutionUrl=http://localhost:8080/web/guest/person-details?p_auth=Cknp0vsP&p_p_id=webflowportlet_WAR_webflowpoc10SNAPSHOT&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_webflowportlet_WAR_webflowpoc10SNAPSHOT_execution=e1s2, person=Person{voornaam='', achternaam='Prefab achternaam', tussenvoegsel=''}, flashScope=map['viewUserEventState' -> [[email protected] eventId = 'save', mappingResults = Mapping Results = [[[email protected] mapping = parameter:'execution' -> execution, code = 'propertyNotFound', error = true, errorCause = org.springframework.binding.expression.PropertyNotFoundException: Property not found, originalValue = 'e1s2', mappedValue = [null]], [[email protected] mapping = parameter:'achternaam' -> achternaam, code = 'success', error = false, originalValue = 'Prefab achternaam', mappedValue = 'Prefab achternaam'], [[email protected] mapping = parameter:'tussenvoegsel' -> tussenvoegsel, code = 'success', error = false, originalValue = '', mappedValue = ''], [[email protected] mapping = parameter:'voornaam' -> voornaam, code = 'success', error = false, originalValue = '', mappedValue = '']]]], flowRequestContext=[[email protected] externalContext = org[email protected]603391cf, currentEvent = [null], requestScope = map[[empty]], attributes = map[[empty]], messageContext = [[email protected] sourceMessages = map[[null] -> list[[empty]], 'voornaam' -> list[[[email protected] source = 'voornaam', severity = ERROR, text = 'may not be empty']]]], flowExecution = [[email protected] flow = 'personDetails', flowSessions = list[[[email protected] flow = 'personDetails', state = 'editPersonDetails', scope = map['masterData' -> map['tussenvoegsel' -> list['', 'de', 'den', 'ten', 'ter', 'uit', 'van', 'van de', 'van den', 'van der']], 'viewScope' -> map[[empty]], 'person' -> Person{voornaam='', achternaam='Prefab achternaam', tussenvoegsel=''}]]]]]}]
я уже не пытался нет помогло:
container-runtime-option
сjavax.portlet.actionScopedRequestAttributes
набор дляtrue
- Распайка
AnnotationMethodHandlerAdapter
сConfigurableWebBindingInitializer
с помощью моегоLocalValidatorFactoryBean
- Размножение такое же поведение с официальным образцом проекта booking-portlet-mvc, который показал ту же самую ошибку. (Я добавил строку
<form:errors path="checkinDate">only shown on error</form:errors>
кenterBookingDetails.jsp
, который не оказывает)
Любые подсказки о различиях между сервлетов и портлетов мира, которые могли бы привести к этому? Или какие-либо намеки на то, где искать в отладке?
Вы проверили с более новыми версиями Spring framework? –