我正在测试如果我在我的操作中设置了一个整数的字段,并且有人试图为其提供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
尝试输出时的窗口。
任何人都可以解释这笔交易是什么吗?
答案 0 :(得分:4)
你的堆栈上可能有conversionError拦截器。
以下是javadoc
的摘录此外,包含验证错误的任何字段都会保存其原始值,以便对该值的任何后续请求都返回原始值而不是操作中的值。这很重要,因为如果提交值“abc”并且无法转换为int,我们想再次显示原始字符串(“abc”)而不是int值(可能为0,这很有意义)给用户)。