有什么方法可以配置 Struts 绑定 null 而不是空字符串吗?

Tom*_*icz 5 java web-applications struts-1

当用户决定将表单中的字段留空时,Apache Struts 会将空绑定StringActionForm. 有什么方法可以全局修改行为并选择null而不是空String

我知道 Spring MVC 的做法完全相同,但还有StringTrimmerEditor可以注册为属性编辑器以将字符串修剪为null.

小智 4

一种可能的解决方案(允许所有 String 字段使用单个转换入口点)是注册一个自定义转换器,但不是使用 Struts 而是使用BeanUtils

为了将请求参数映射到表单属性,Struts 使用其 RequestUtils 类的 populate 方法。这个类又使用一个BeanUtils实现来做它的工作。

一个简单的流程类似于 Struts 的RequestUtils > BeanUtils > BeanUtilsBean > ConvertUtils > ConvertUtilsBean > Converter

有趣的是,还有一个StringConverter可以将 String 转换为...aaaaaa...String!

ConvertUtils类有一个 register方法,您可以使用它来注册转换器,覆盖现有的转换器。这意味着您可以自己编写自定义字符串转换器,该转换器对于空字符串返回 null,然后您可以等待 Struts 应用程序完全加载,这样您就不会感到意外(即确保您的转换器是最后为 type 注册的String)。

应用程序加载后,您介入并用您自己的实现覆盖默认的字符串转换器。例如,您可以使用ServletContextListenerConvertUtils.register(...)来执行此操作并在方法中调用contextInitialized

然后,您可以在中配置侦听器web.xml,然后就可以开始了