Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringWebFlow中映射对象时发生FlowInputMappingException_Java_Spring_Spring Mvc_Spring Webflow - Fatal编程技术网

Java 在SpringWebFlow中映射对象时发生FlowInputMappingException

Java 在SpringWebFlow中映射对象时发生FlowInputMappingException,java,spring,spring-mvc,spring-webflow,Java,Spring,Spring Mvc,Spring Webflow,我试图遵循“Spring in Action”中SpringWebFlow的代码。但是,当我尝试运行应用程序时,出现以下错误: org.springframework.webflow.engine.FlowInputMappingException: Errors occurred during input mapping on startup of the 'pizza' flow; errors = [[RequiredError@13cb4078 mapping = order ->

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

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中实例化order对象的行是导致异常的原因:

<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如下所示:

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



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

错误表示需要将非空输入参数/obj“order”传递给子流,并且在order输入中传递空值。因此,如果没有提供,它将抛出您看到的异常。在子流的顶部,应如下所示:

<input name="order" required="true" type="com.mycompany.pizza.domain.Order"/>
您应该通过新运算符或工厂方法调用,在父流开头的“开始”标记内使用“设置”标记,显式设置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>

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

<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"/>


这对我不起作用。我在实现记录器时也遇到了问题,因为在我的终端上看不到任何日志输出。对于记录器,我所做的只是在我的flow.xml中添加表达式并包含依赖项。还有其他步骤吗?@Terry您需要配置log4j才能使用它。在项目的“src/main/resources”文件夹中是否有log4j.xml或log4j.properties文件?我能够实现日志记录。我已检查是否能够记录调试和信息日志。但是,信息日志没有向我显示任何正在实例化的对象的提示。我应该用其他东西替换“someLogger”吗?@Terry“someLogger”只是为了你自己的命名。我的答案中的evaluate语句应该打印obj引用Id(或Order类上toString()重写方法的实现),但最重要的是它的输出不是“null”,因为这是您的问题您正在向子流传递null顺序如果对象为null,日志会显示吗?我在
中尝试了以下行,但它也没有记录。日志文件不显示其他信息日志