【问题标题】:Spring Webflow, the ID and version get strippedSpring Webflow,ID和版本被剥离
【发布时间】:2014-07-31 08:40:54
【问题描述】:

我最近在使用 Spring Webflow 时遇到了一个奇怪的错误,我似乎无法找到问题所在,而且似乎没有人遇到过这种情况。

当启动我的流程时,我从数据库加载一个对象,然后用户将在流程中修改该对象。 加载对象时,每个属性都正确绑定:在调试 on-entry 函数时,对象已设置所有属性。但在那之后,当视图被渲染后,对象的“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 字段外,表单中的每个数据都可以正确查看。

流程:

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

处理者:

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());
}

【问题讨论】:

  • 显示如何在流 xml 中配置视图以及您在视图中使用的 commandName。
  • 编辑了消息。请注意,除了 ID 和 VERSION 字段之外,整个表单和流程都运行良好(因为我可以保存新实例)
  • 您是否尝试在视图中使用 cout 作为:,这是查看 value 是否真的与 form 绑定的试金石。跨度>
  • 是的,我做到了,但什么都没有显示...似乎在处理对象并将其传递给视图之后,值被删除了。我也尝试手动放置一些值,既将字段放置在视图中,也将值设置在控制器中,但结果仍然是一样的:无论如何 value 都是 null
  • 那么我怀疑处理程序的准备方法。你也可以发布它的代码吗?

标签: java spring spring-webflow


【解决方案1】:

好的,在我的头在桌子上重重敲了三天之后,我发现了以下内容:

为了让 Webflow 与任何类型的自定义表单一起工作,它必须实现 Serializable 接口,而我的表单对象确实做到了。 但是它继承idversion字段的对象没有,所以所有与对象相关的属性都被正确存储,但不是继承的没有序列化。

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

【讨论】:

  • 感谢您解决此问题。在找到您的答案之前我浪费了 3 个小时而不是 3 天 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 2017-01-17
相关资源
最近更新 更多