SpelEvaluationException: EL1010E: Свойство или поле 'messageContext' нельзя установить для объекта типа 'RequestControlContextImpl' - PullRequest
0 голосов
/ 04 марта 2019

Я использую 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 Ответ

0 голосов
/ 08 марта 2019

I подозреваю , что происходит в этой строке:

<evaluate expression="orderFlowService.msgCnt(messageContext)"  result="messageContext" />

Пытается поместить результат orderFlowService.msgCnt() (который является логическим "true") непосредственно вместо, которое не ожидается, с именем «messageContext», которое может даже быть существующим объектом.Я догадываюсь о некоторых внутренних деталях здесь, но думаю, что, может быть, это не то, что вы имели в виду / нужно сделать?

Поскольку вы передаете messageContext в метод и добавляете туда сообщения, я думаю, что вы не понимаетевообще не хочу указывать result.

...