【问题标题】:Struts2 converting empty string parameter to an "int"Struts2 将空字符串参数转换为“int”
【发布时间】:2011-03-01 23:08:00
【问题描述】:

如何使用 Struts2 将空字符串转换为 int。当应用程序遇到这个没有值的参数时,比如来自一个空的文本字段,它会抛出以下异常。

java.lang.NoSuchMethodException:
com.XXXXXXXXXXXX.setID([Ljava.lang.String;)

其中ID为整数,URL为:

Something.action?ID=&other=rawr

有没有办法在不使用整数(类)的情况下做到这一点?我必须写一个类型转换器吗?

【问题讨论】:

  • 你为什么不想给你一个整数?这是推荐的方式,特别是对于 bean 的属性。
  • 这是一个字符串数组(因为可以提供多个具有相同名称的值)

标签: java struts2 type-conversion


【解决方案1】:

如果您将 id 参数声明为 Integer,struts 会将空字符串转换为 null。

public void setId(Integer id){ 
...
}

发件人:http://struts.apache.org/2.0.14/docs/type-conversion.html#TypeConversion-NullandBlankValues

空值和空白值

某些属性不能设置为空。 像 boolean 和 int 这样的原语不能 为空。 如果您的操作需要或 将接受空值或空白值,使用 对象等价物 Boolean 和 整数。 同样,一个空字符串“” 不能在原语上设置。在 写作时间,还有一个空白字符串 不能设置为 BigDecimal 或 大整数。使用服务器端验证 防止无效值 在您的属性上设置(或处理 适当的转换错误)。

【讨论】:

  • 哦 - 我刚刚看到你已经意识到这一点......整数不好? "" 将转换为什么 int 值? 0? -1?一些已知的常数?
【解决方案2】:

我不知道你为什么不喜欢首先使用Integer。但是,您可以将 set 方法设置为,

public void setId(String id) {
     ....             // convert your string to int here, as you wish
     this.id = intId; // 
}

如果您有一些默认值。您可以使用 commons-lang StringUtils.defaultIfEmpty(...) 方法。

访问者仍然是public int getId(){...}。试试这个。

【讨论】:

  • 小心,有时对 setter 和 getter 使用不同的类型会混淆 OGNL。如果是这样,您可能还需要让 getId() 返回一个字符串。
  • 感谢您的链接。我试图找到一个更通用的解决方案,因为我们在整个应用程序中都使用“int”,我希望不必将它们全部转换为整数。我可以将成员保留为“int”但编写 setId(Integer id) 方法吗?
  • "我可以将成员保留为 "int" 但编写一个 setId(Integer id) 方法吗?"你可以,但问问自己如果调用 setId(null) 会发生什么。
  • @Kyle Partridge:我想让你看看这个帖子stackoverflow.com/questions/423704/java-int-or-integer/…。实际上,在某些特定情况下,intInteger 哪个更好。
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 2011-03-06
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多