1

我正在使用带有 Spring MVC 和 Hibernate 的 Web Flow 2.0.7。

我的问题是关于我的自定义类型的自定义转换器和我的转换器中的数据库连接。

假设我有一个Person类型,并且Person有一个我的自定义类型Title的字段,并且所有Titles都已经在我的数据库中。现在我有一个 html 表单,用户可以在其中填充Person实例,包括在选择下拉框中选择Title 。

在流程定义中,我从数据库中获取所有标题,它们使用自定义转换器显示在下拉框中,将Title转换为String,然后再转换回Title

我的问题是关于从我的数据库中从String(这是数据库 ID,我将其设置为元素的值)转换回正确Title对象的过程。基本上:怎么做?

到目前为止,我无法将 titleManager 注入到我的转换器中以访问数据库。这个场景在Spring Web Flow 论坛中得到了评论。另一种解决方案可能是在呈现视图之前缓存标题,并在表单发布后以某种方式获取内存中的标题

如果有人能启发我,我将非常感激如何处理这种数据绑定。到目前为止,我无法让它工作,因此,我从原本很棒的 webflows 中得到了最少的使用。

我已经在 Web Flow Board 上发布了一个帖子,但仍然缺少我自己无法找到的最佳实践。

非常感谢!

4

2 回答 2

1

我用来做这个。基本上我加载标题列表并将其放入我的表单模型中。在表单模型中,我还有一个 currentTitleId 或 selectedTitleId 变量来存储所选项目的值。此字段名称设置在 spring 组合框的“路径”中,而 titleList 设置在“项目”中。然后在“itemValue”中设置您要绑定的值,并在“itemLabel”中为该值显示文本。就是这样。

在我的表单模型中:

private int currentTitleId;
public long getCurrentTitleId() { return this.currentTitleId; }
public void setCurrentTitleId(long currentTitleId) { this.currentTitleId = currentTitleId; }

List titleList = getTitlesFromMyDatabaseHereOrSomewhereElse();

在我的jsp中:

<form:label path="currentTitleId">Title</form:label>
<form:select path="currentTitleId" items="${formModel.titleList}" itemLabel="titleDescription" itemValue="titleId" />

我假设您的 Title 类将是这样的:

class Title {
    public long getTitleId() { return this.titleId; }
    public long getTitleDescription() { return this.titleDescription; }
}

您还可以像这样自定义组合框:

    <form:select path="currentPhoneNumberId">
    <form:option value="">-</form:option>
    <c:forEach items="${formModel.phoneList}" var="phone">
        <form:option value="${phone.phoneNumberId}">${phone.phoneNumberId} - ${phone.description}</form:option>
    </c:forEach>
</form:select>
于 2009-07-23T16:44:59.237 回答
0

我不太确定 Spring Web Flow,但是使用普通的 Spring MVC 注册一个新的 PropertyEditor 就足够了,然后这些东西会自动工作

http://static.springframework.org/spring/docs/2.5.x/reference/validation.html#beans-beans-conversion-customeditor-registration

http://static.springframework.org/spring/docs/2.5.x/reference/mvc.html#mvc-ann-webdatabinder

因此,我将创建一个新的 PropertyEditor,它获取一个服务或 dao,它负责从数据库中获取数据,在 PropertyEditor 中,您可以将 id 转换为您的键类型并从数据库中获取值并返回它。我只是没有一个例子,但我希望你能明白要点。

于 2009-04-23T21:55:17.647 回答