我使用 struts2 开发 Web 应用程序。我想改进从表单中获取字符串。为此需要修剪所有字符串,如果获得的字符串为空,则将 null 设置为字段。

为此,我创建了 StringConverter

public class StringConverter extends StrutsTypeConverter { 
 
    @Override 
    public Object convertFromString(Map context, String[] strings, Class toClass) { 
       if (strings == null || strings.length == 0) { 
          return null; 
       } 
 
       String result = strings[0]; 
       if (result == null) { 
          return null; 
       } 
 
       result = result.trim(); 
       if (result.isEmpty()) { 
          return null; 
       } 
       return result; 
    } 
 
    @Override 
    public String convertToString(Map context, Object object) { 
       if (object != null && object instanceof String) { 
          return object.toString(); 
       } 
       return null; 
    } 
} 

接下来,我将行添加到 xwork-conversion.properties

java.lang.String=com.mypackage.StringConverter 

就是这样。但是我没有得到想要的结果。


在jsp构建表单时调用了convertToString()方法,但是convertFromString()没有调用。

我做错了什么?如何使用其他方式获得相同的行为?

请不要提供以下解决方案:

  1. 使用 javascript 删除此类表单元素的值。
  2. 创建使用反射的 util 方法。然后为每个表单 bean 调用它。

提前致谢, 阿列克谢。

请您参考如下方法:

您将在 StrutsTypeConverter 类的代码中找到答案。基本上,在这个级别上,类型转换器框架不知道关于数据是“来自”用户还是“到”用户的任何信息,它只知道它正在从一种类型 (String) 转换为另一种类型类型(也是字符串)。由于它首先检查“to”类型,因此它总是调用 convertToString。

长话短说,当前版本的 Struts(我使用的是 2.1.x)不支持也不能支持字符串到字符串类型的转换器。因为它们毕竟是类型转换器,所以您可以说这是设计使然。

我也在寻找一种方法来实现类似的结果,但还没有找到真正好的解决方案。可能最“正确”的方法是编写一个拦截器(如@leonbloy 所述)。有几种方法可以解决这个问题,最直接的方法是在为操作设置所有请求参数之前(即在“params”拦截器执行之前)修剪所有请求参数。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!