#java #spring #jsp #spring-webflow
#java #spring #jsp #spring-webflow
Вопрос:
Я использую Spring Web Flow для создания потока для оформления заказа. Пользователь должен авторизоваться и ввести свое имя пользователя в потоке, если пользователь введет имя пользователя другого человека, мой поток отклонит его заказ и поместит «Войти как этот пользователь» в контекст сообщения. Но, к сожалению, мой поток завершается сбоем с этим исключением:
org.springframework.expression.spel.SpelEvaluationException: EL1010E: Property or field 'messageContext' cannot be set on object of type 'org.springframework.webflow.engine.impl.RequestControlContextImpl' - maybe not public or not writable?
Мой код потока
<view-state id="login" >
<transition on="loginEntered" to="lookupUser" validate="true"/>
</view-state>
<action-state id="msgcnt" >
<evaluate expression="orderFlowService.msgCnt(messageContext)" result="messageContext" />
<transition on="yes" to="login" />
</action-state>
// other flows omitted
мой метод msgCnt:
public boolean msgCnt(MessageContext context){
context.addMessage(new MessageBuilder().info().source("check").defaultText("Увійдіть як цей користувач !").build());
return true;
}
и jsp-view:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Увійдіть!</title></head>
<body>
<h2>Нове замовлення!</h2>
<p/>
<h3>Введіть ваш логін. Якщо у вас його немає,введіть як бажаєте себе
назвати!</h3>
<c:forEach items="${messageContext.getMessagesBySource(check)}"
var="message">
<h3>${message}</h3>
</c:forEach>
<form:form>
<input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/>
<input type="text" name="login" /><br/>
<input type="submit" name="_eventId_loginEntered" value="Продовжити"/>
</form:form>
</body>
</html>
Ответ №1:
Я подозреваю, что происходит, так это то, что эта строка:
<evaluate expression="orderFlowService.msgCnt(messageContext)" result="messageContext" />
Пытается поместить результат из orderFlowService.msgCnt()
(который является логическим значением «true») непосредственно в место, где он не ожидается, с именем «MessageContext», которое, возможно, даже может быть существующим объектом. Я предполагаю, что здесь есть некоторые внутренние компоненты, но думаю, может быть, это не то, что вы имели в виду / нужно было сделать?
Поскольку вы передаете messageContext
в метод и добавляете сообщения внутри него, я думаю, вы вообще не хотите указывать result
.
Комментарии:
1. Да, вы правы! Я заменил возвращаемое значение на void и удалил поле ‘result’ в flow, но теперь я просто перенаправляюсь на свою страницу без текста ошибки.
2.
messageContext
является зарезервированной переменной el. смотрите docs.spring.io/spring-webflow/docs/2.5.0.RELEASE/reference/html /…