Struts 2表单处理的奇怪问题

时间:2013-09-13 08:11:24

标签: java jsp struts2

我正在测试如果我在我的操作中设置了一个整数的字段,并且有人试图为其提供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尝试输出时的窗口。

任何人都可以解释这笔交易是什么吗?

1 个答案:

答案 0 :(得分:4)

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

以下是javadoc

的摘录
  

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