多场ognl型转换器

时间:2009-10-29 15:00:45

标签: java struts2 ognl

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

capture.id = 213
capture.description = DescriptionText

目标对象'capture'是不可变的,我想提供一个类型转换器来获取两个值并调用构造函数。我似乎无法做的是调用TypeConverter。

如果输入只是:

capture = foo

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

有什么想法吗?这在struts2中是否可行

版本:struts 2.0.14& ognl 2.6.11

编辑:我已经对此做了一些阅读,我的下一次尝试似乎是一个很好的计划。我的理论是使用Map语法会使Ognl将值转换为地图,然后使用该地图调用我的转换器将其转换为我的值。

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

没有看起来没有任何区别。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

似乎答案是没有你不能用struts2做到这一点。

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

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

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