gpt4 book ai didi

java - 在 Spring Webflow 中映射对象时出现 FlowInputMappingException

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:24 25 4
gpt4 key购买 nike

我正在尝试遵循“Spring in Action”中的 Spring Webflow 代码。但是,当我尝试运行该应用程序时,出现以下错误:

org.springframework.webflow.engine.FlowInputMappingException: Errors occurred during input mapping on startup of the 'pizza' flow; errors = [[RequiredError@13cb4078 mapping = order -> flowScope.order, code = 'required', error = true, errorCause = [null], originalValue = [null], mappedValue = [null]]]

我相信在以下流 xml 中实例化订单对象的行是导致异常的原因:

<var name="order" class="com.mycompany.pizza.domain.Order" />
<subflow-state id="customer" subflow="customer-flow">
<input name="order" value="order"/>
<transition on="customerReady" to="buildOrder" />
</subflow-state>

我的子流 xml 如下所示:

<view-state id="welcome">
<transition on="phoneEntered" to="lookupCustomer" />
</view-state>

<action-state id="lookupCustomer">
<evaluate result="order.customer"
expression="pizzaFlowActions.lookupCustomer(requestParameters.phoneNumber)" />
<transition to="registrationForm"
on-exception="com.mycompany.pizza.service.CustomerNotFoundException" />
<transition to="customerReady" />
</action-state>

希望有人能给我指出正确的方向。谢谢!

最佳答案

该错误表示您需要将 NOT NULL 输入参数/obj“order”传递给您的子流程,并且您在 order 输入中传递了 null 值。因此,如果未提供,它将引发您看到的异常。子流程的顶部应如下所示:

<input name="order" required="true" type="com.mycompany.pizza.domain.Order"/>
话虽这么说,一般来说,我认为在流/子流之间传递 pojo 时,最好非常明确地填写子流调用者和子流本身的输入标记中的“type”属性,并填写 value 属性的范围前缀(例如 flowScope.order)

此外,我认为你的问题是 <var>标签没有初始化您的订单 pojo,这就是它为空的原因,它相当于:

Order order = null;

您应该使用父流程开头的“on-start”标签内的“set”标签,通过 new 运算符或工厂方法调用显式设置 flowScope.order。像这样的事情:

<on-start>
<set name="flowScope.order" value="new com.mycompany.pizza.domain.Order()"/>
<!-- for development purposes... assuming you are using log4j grab the logger and check that order is in fact NOT null -->
<evaluate expression="T(org.apache.log4j.Logger).getLogger('someLogger').info(flowScope.order)"/>
</on-start>

然后(仍在父流程中)将子流程调用更改为如下所示:

<subflow-state id="customer" subflow="customer-flow">
<input name="order" value="flowScope.order" type="com.mycompany.pizza.domain.Order"/>
<transition on="customerReady" to="buildOrder" />
</subflow-state>

并且...确保您还填写了 subflow.xml 的输入标记内的 type 属性,如下所示:

<input name="order" required="true" type="com.mycompany.pizza.domain.Order"/>

关于java - 在 Spring Webflow 中映射对象时出现 FlowInputMappingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com