【发布时间】:2013-09-13 08:11:23
【问题描述】:
我正在测试如果我在操作中设置了一个整数字段,并且有人试图为其提供 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 .
谁能解释一下这笔交易是什么?
【问题讨论】:
-
所以基本上你会返回成功,即使没有。我猜请求参数设置正确但转换失败
-
@user2310289 是的,仅用于调试目的。但是我不明白的是,在.jsp文件中,怎么会在action中显示foo的字符串值,却显示为null呢?
-
@user2310289 顺便说一句,即使我返回错误,我仍然会在控制台中看到有关异常的警告(因此它仍然尝试将字符串值分配给整数字段),如果我使用相同的.jsp 为错误结果,它仍然输出
foo的字符串值 -
明确一点,请求中的每个参数都是一个String。 Struts 2 有一组默认转换器,可以在您不知情的情况下管理到您的操作属性的基本转换。检查以下网址:struts.apache.org/release/2.3.x/docs/type-conversion.html
-
顺便说一句,谁对这个问题投了反对票。这是一个合理的问题,因为在 struts 2 的幕后发生了很多事情。