Struts ActionForm属性应该是什么类型的?

时间:2008-10-16 17:19:39

标签: java struts design-patterns anti-patterns

我使用Struts 1.2.4继承了这个巨大的遗留Java Web应用程序。我有一个关于ActionForms的具体问题。其中一些只有String属性(即使是数字),其中一些使用看似合适的类型(整数,日期,字符串等)。这里最好的做法是什么?

此外,似乎如果属性的类型为Integer,并且用户输入的值不是整数值,Struts会默默地吞下它,并且不会设置该属性。怎么了?

2 个答案:

答案 0 :(得分:5)

对于Struts 1.2x,用户在HTML表单上输入或选择值并且由Struts HTML标记自动填充在ActionForm实例上的属性必须是字符串或布尔值。但是,没有理由为什么你的ActionForm不能有getter方法将属性作为应用程序更有意义的类型返回,例如日期。

答案 1 :(得分:3)

如果你想自己做一些验证(或者使用已经在1.2之后的struts中重构的struts验证器功能),你需要String属性,因为你引用的原因是:在Integer中存储数值后或者int值,它们必须是数字或“根本没有” - 否则:你如何在“整数”属性中存储“很多”(字面意思)?

客户端验证(例如在Javascript中)仍然有效,但您不想依赖此。

如果 - 在输入无效数字时 - 您可以将用户显示为空白字段,则可以将值存储在Date-,Integer-,Whatever-Properties中。如果您想使用错误消息显示原始值,则需要String属性。

这具有您手动进行转换所需的价格。由于Struts 1.2已经相当陈旧,您可能需要考虑逐渐用更先进的技术替换您的应用程序基础架构,同时在两种技术(旧的和新的)上运行一段时间,直到旧部分变得足够小(或者不重要的)被丢弃。

nb - 您还可以更好地控制要接受的数字值。我还记得一个旧的Struts信用卡银行应用程序,其中我问我的经理当你想从你的卡中提取3e2欧元时预期的结果是什么。他们没有说300(作为Struts转换)但选择了错误。