我正在使用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视图:
<%@ 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>
答案 0 :(得分:0)
我怀疑正在发生的事情是这一行:
<evaluate expression="orderFlowService.msgCnt(messageContext)" result="messageContext" />
正在尝试将orderFlowService.msgCnt()
(它是一个布尔值“ true”)的结果直接放入一个不希望出现的地方,其名称为“ messageContext”,它甚至可能已经存在宾语。我在这里猜测一些内部信息,但是想想这也许不是您想要/不需要的吗?
因为您将messageContext
传递给该方法并在其中添加消息,所以我认为您根本不想指定result
。