2

我正在测试如果我在我的操作中设置了一个整数字段,并且有人试图String为它提供一个值,会发生什么。

例如:

public class FooAction extends ActionSupport
{
   private Integer foo;
   public Integer getFoo() 
   { ... }

   public void setFoo(Integer foo)
   {... }

   public String execute()
   {
      System.out.println( foo );
      return SUCCESS;
   }
}

如果我创建以下表单并尝试提交:

<form method="post" action="/foo.action">
  <input type="text" name="foo" />
  <input type="submit" value="go" />
</form>

然后,如果我在文本框中只提供一个数字,它就可以正常工作。

但是,如果我在文本框中提供诸如“bar”之类的字符串,则会发生以下情况:

1) 在 IDE 的输出窗口中,我看到有关尝试将字符串值设置为整数字段的异常的警告。

2) 紧接着,我将 'null' 视为foo.

3)但是,奇怪的是,在我设置为在提交表单时显示的 .jsp 文件中,我有以下行:

<h2><s:property value="foo" /></h2>

jsp 的这一行的输出是bar(这是我在表单中输入的内容),即使该foo字段是整数并且我null在尝试输出它时进入了输出窗口。

谁能解释一下这笔交易是什么?

4

1 回答 1

4

您的堆栈上可能有 conversionError 拦截器。

这是javadoc的一个片段

此外,任何包含验证错误的字段都会保存其原始值,以便对该值的任何后续请求都返回原始值而不是操作中的值。这很重要,因为如果提交了值“abc”并且无法转换为 int,我们希望再次显示原始字符串(“abc”)而不是 int 值(可能为 0,这没有什么意义给用户)。

于 2013-09-13T08:46:44.310 回答