我使用 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()没有调用。
我做错了什么?如何使用其他方式获得相同的行为?
请不要提供以下解决方案:
- 使用 javascript 删除此类表单元素的值。
- 创建使用反射的 util 方法。然后为每个表单 bean 调用它。
提前致谢, 阿列克谢。
请您参考如下方法:
您将在 StrutsTypeConverter 类的代码中找到答案。基本上,在这个级别上,类型转换器框架不知道关于数据是“来自”用户还是“到”用户的任何信息,它只知道它正在从一种类型 (String) 转换为另一种类型类型(也是字符串)。由于它首先检查“to”类型,因此它总是调用 convertToString。
长话短说,当前版本的 Struts(我使用的是 2.1.x)不支持也不能支持字符串到字符串类型的转换器。因为它们毕竟是类型转换器,所以您可以说这是设计使然。
我也在寻找一种方法来实现类似的结果,但还没有找到真正好的解决方案。可能最“正确”的方法是编写一个拦截器(如@leonbloy 所述)。有几种方法可以解决这个问题,最直接的方法是在为操作设置所有请求参数之前(即在“params”拦截器执行之前)修剪所有请求参数。