【问题标题】:Multiple field ognl type converter多字段ognl类型转换器
【发布时间】:2009-10-29 15:00:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: java struts2 ognl


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答 +1 的努力,但这些东西是另一种生活,三份工作前在遥远的银河系,所以我什至不记得我在做什么。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多