Java 如何在SpringWebFlow2中编写自定义转换器?
我将WebFlow2.0.7与SpringMVC和Hibernate一起使用 我的问题是关于自定义类型的自定义转换器和来自转换器内的数据库连接 假设我有一个类型Person,这个Person有一个自定义类型Title的字段,所有的Title都已经在我的数据库中了。现在我有了一个html表单,用户可以在其中填充Person实例,包括在选择下拉框中选择标题 在流定义中,我从数据库获取所有标题,它们使用自定义转换器显示在下拉框中,将标题转换为字符串,然后再转换回标题 我的问题是关于从字符串(即数据库ID,我在元素上设置为值)转换回数据库中正确的Title对象的过程。基本上:怎么做 到目前为止,我无法将标题管理器注入到我的转换器中以访问数据库。该场景已在中进行了评论。另一种解决方案可能是在呈现视图之前缓存标题,并在发布表单之后以某种方式获取内存中的标题 如果有人能告诉我如何处理这种数据绑定,我将不胜感激。到目前为止,我还无法让它正常工作,因此,我很少使用其他很棒的webflows 我已经发布了,但仍然缺少一个最好的实践,这是我自己找不到的 非常感谢你Java 如何在SpringWebFlow2中编写自定义转换器?,java,spring-mvc,converter,spring-webflow,Java,Spring Mvc,Converter,Spring Webflow,我将WebFlow2.0.7与SpringMVC和Hibernate一起使用 我的问题是关于自定义类型的自定义转换器和来自转换器内的数据库连接 假设我有一个类型Person,这个Person有一个自定义类型Title的字段,所有的Title都已经在我的数据库中了。现在我有了一个html表单,用户可以在其中填充Person实例,包括在选择下拉框中选择标题 在流定义中,我从数据库获取所有标题,它们使用自定义转换器显示在下拉框中,将标题转换为字符串,然后再转换回标题 我的问题是关于从字符串(即数据库I
Wolfram我对SpringWebFlow不是很确定,但是对于普通的SpringMVC,注册一个新的PropertyEditor就足够了,然后这些东西就会自动工作
因此,我将创建一个新的PropertyEditor,它获取一个服务或dao,负责从数据库获取数据,在PropertyEditor中,您将id转换为键类型,从数据库获取值并返回它。我只是没有一个合适的例子,但我希望你能理解要点。我对SpringWebFlow不是很确定,但是对于普通的SpringMVC,注册一个新的PropertyEditor就足够了,然后这些东西就会自动工作 因此,我将创建一个新的PropertyEditor,它获取一个服务或dao,负责从数据库获取数据,在PropertyEditor中,您将id转换为键类型,从数据库获取值并返回它。我只是没有一个合适的例子,但我希望你能理解要点。我经常这样做。 基本上,我加载标题列表并将其放入表单模型中。在表单模型中,我还有一个currentTitleId或selectedTitleId变量来存储所选项目的值。该字段名在spring组合框的“路径”中设置,标题列表在“项目”中设置。然后在“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" />
您还可以像下面这样自定义组合框:
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>
-
${phone.phoneNumberId}-${phone.description}
我经常这样做。
基本上,我加载标题列表并将其放入表单模型中。在表单模型中,我还有一个currentTitleId或selectedTitleId变量来存储所选项目的值。该字段名在spring组合框的“路径”中设置,标题列表在“项目”中设置。然后在“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" />
您还可以像下面这样自定义组合框:
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>
-
${phone.phoneNumberId}-${phone.description}
谢谢您的回答。不幸的是,我的问题恰恰是MVC和Web流中转换器之间的明显区别。我确实有属性编辑器在工作,但在Web流中没有这样做。谢谢你的回答。不幸的是,我的问题恰恰是MVC和Web流中转换器之间的明显区别。我确实有属性编辑器在工作,但在Web Flow.OMG中没有这样做。非常感谢您提供了这个示例!在过去的两天里,我一直在努力让这一切顺利进行。天哪,非常感谢你给了我这个例子!在过去的两天里,我一直在努力使这项工作顺利进行。