【发布时间】:2011-07-11 05:04:03
【问题描述】:
【问题讨论】:
标签: java spring-mvc type-conversion
【问题讨论】:
标签: java spring-mvc type-conversion
Spring Webflow 使用 spring 的转换服务。 Webflow 不提供 InitBinder 类型方法/注释的可用性。所以你告诉 Spring 你想要为所有流完成的所有转换。如果 ConversionService 不可用,则绑定支持将不可用。
【讨论】:
转换服务可用于直接在 UI 和业务对象之间进行转换。
假设我有一个带有产品下拉列表的 web 应用。定义一个 ProductConversionService 将下拉列表的值(例如 id 4)转换为 Product 很简单。现在在我的代码(控制器、API 等)中,我只引用一个产品,一切都会自动发生。
在较旧的 UI 中,我看到了大量专门用于这种转换的代码。我会故意举一个粗略的例子:
String productIdParam = request.getParameter("productId");
// Validate that the param exists, is numeric, etc.....
Long productId = Long.valueOf(productIdParam);
Product product = productManager.findProduct(productId);
这段代码也更难测试,因为我必须创建一个模拟请求,给它一个 productIdParameter 等等。我还需要在需要的任何地方都可以使用 productManager。
使用 ConversionService,我可以将其放入 JSP 中:
<form:select path="mystuff.product">
<option value="1">Nook</option>
<option value="2">Cranny</option>
</form:select>
当我的 Spring MVC 控制器收到请求时,mystuff.getProduct() 具有选定的产品。干净简单。我也可以在 Web 层之外使用它。
【讨论】: