Spring Webflow,ID和版本被剥离

时间:2014-06-10 14:21:27

标签: java spring spring-webflow

我最近遇到了一个与Spring Webflow的奇怪错误,我似乎无法找到问题,似乎没有人经历过这个问题。

当我开始流程时,我从数据库加载一个对象,然后用户将在流程中修改该对象。 在加载对象时,每个属性都被正确绑定:在调试入口函数时,该对象具有所有属性集。但是,在那之后,当渲染视图时,对象的“id”和“version”字段突然变为空,因此<form:hidden path="id" /><form:hidden path="version" />不会显示任何内容。

我不知道从哪里开始,我不想把这些无用的代码放在这里,所以如果你需要我的部分代码,请问。

其他信息:

我还尝试使用<form:input path="id" />强制修改这些字段,并尝试手动将一些值放入并提交表单,但没有运气。

重要更新 似乎每个“复杂”对象都会出现这个问题,让我们说MyForm中有另一个类,叫做B.如果B只包含基本类型,如Integer和String,它们的id和版本都是正确存储和检索的。字段,如果B中有其他类型的对象字段(C类),那么它们的id和版本就会消失。

对视图感兴趣的流配置的摘录。请注意,除了id和version字段外,每个数据都在表单中正确查看。

FLOW:

<input name="idObj" />
<decision-state id="createOrEdit">
    <if test="idObj== null" then="newObj" else="modObj" />
</decision-state>
...
<action-state id="modObj">
    <evaluate expression="Search.findOne(idObj)" result="flowScope.form"/>
    <transition to="object" />
</action-state>

<view-state id="object" view="flow.object" model="form">
    <on-entry>
        <evaluate expression="handler.prepare(flowScope.form)"/>
    </on-entry>
    <!-- transitions omitted -->
</view-state>

查看:

<form:form modelAttribute="form" cssClass="form form-horizontal">
    <form:input path="id" />
    <form:input path="version" />
    <!-- other fields -->
    <input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}"/>
</form:form>

HANDLER:

public void prepare(MyForm form) {

    int codType = form.getFormType().getId();
    FormType type = service.findOne(codType);

    form.setFormType(type); // This is here for JPA to save correctly the instance
    RequestContext requestContext = RequestContextHolder.getRequestContext();
    requestContext.getViewScope().put("typeList", typeService.findAll());
}

1 个答案:

答案 0 :(得分:2)

好的,在桌子上用力撞了三天后,我发现了以下内容:

为了让Webflow能够使用任何类型的自定义表单,它必须实现Serializable接口,而我的表单对象实际上已经完成了。 它继承idversion字段的对象,因此所有与对象相关的属性都已正确存储,但不是继承的那些没有被序列化的。

因此,简而言之,为了使其工作,我只需将implements Serializable放在基础数据库对象类中:public class BaseDTO implements Serializable