0

我有一个包含(目前)两个字段的表单并提交以下内容:

capture.id = 213
capture.description = DescriptionText

目标对象“捕获”是不可变的,我想提供一个类型转换器来获取两个值并调用构造函数。我似乎不能做的是让 TypeConverter 被调用。

如果输入很简单:

capture = foo

然后调用类型转换器,但显然这并没有多大用处,是否可以让 ognl 将类型对话的其余部分委托给我,也许传入参数的 Map?

有任何想法吗?这在struts2中是否可能

版本:struts 2.0.14 & ognl 2.6.11

编辑:我已经对此进行了一些阅读,我的下一次尝试在我看来是一个好计划。我的理论是使用 Map 语法会使 Ognl 将值转换为映射,然后使用该映射调用我的转换器以将其转换为我的值。

capture[id] = 213
capture[description] = DescriptionText

不,这似乎根本没有任何区别。

4

2 回答 2

1

我这样做的方法是在 JSP 中有以下内容:

<s:textfield name="capture" value="capture.id" />
<s:textfield name="capture" value="capture.description" />

在类型转换器中,convertFromString 方法的 String[] values 参数将包含构造新的不可变捕获所需的两个值。如果您与文本字段顺序一致(或者更好的是,将其封装在标记文件中),您可以使用值数组的索引来可靠地获取捕获对象的适当字段。

这种方法的一个奇怪的部分是 convertToString 方法并没有真正为你做任何事情。您可以返回 id 或 description(或将它们连接在一起),但由于您在 JSP 中使用 values 属性,所以这并不重要。

于 2012-03-28T23:38:47.147 回答
0

似乎答案是否定的,你不能用 struts2 做到这一点。

我已经在 struts2 邮件列表上发布了这个问题,似乎不可能将多个字段呈现给TypeConverter.

建议的替代解决方案是使用带有 setter 的可变对象,然后使用某种形式的“petify”方法来防止将来发生任何更改。

对于我的项目,我实际上实现了另一个 struts 拦截器来实现我的自定义参数绑定行为。

于 2009-11-04T11:11:56.127 回答