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

6
我继承了一个使用Struts 1.2.4的巨大遗留Java Web应用程序。我的一个具体问题是关于ActionForm的。有些ActionForm只有字符串属性(甚至是数字),而有些ActionForm使用了适当的类型(Integer、Date、String等)。这里最佳实践是什么?
另外,如果属性的类型为Integer,而用户输入的值不是整数值,Struts会默默地吞掉它并且不设置该属性。这是怎么回事?
2个回答

5

对于Struts 1.2x,用户在HTML表单上输入或选择值并由Struts HTML标签自动填充到ActionForm实例中的属性必须是字符串或布尔类型。然而,您的ActionForm可以有getter方法将属性作为更有意义的类型返回给应用程序,例如日期。


3
如果你想自己进行一些验证(或使用已从Struts 1.2中重构出来的Struts验证器功能),那么你需要使用字符串属性,正如你所说的原因:一旦你将数字值存储在Integer或int值中,它们必须是数字或“完全没有” - 否则,你怎么能在Integer属性中存储“很多”(字面上)呢?
客户端验证(例如JavaScript中的验证)仍然有效,但你不希望依赖于此。
如果在输入无效数字时,你可以接受用户看到一个空白字段,那么你可以将值存储在日期、整数或其他属性中。如果你想在错误消息中显示原始值,则需要使用字符串属性。
这样做的代价是你需要手动进行转换。由于Struts 1.2相当古老,因此你可能要考虑逐步用更现代的技术替换你的应用基础设施,并同时使用两种技术(旧的和新的)一段时间,直到旧部分变得足够小(或不再重要)才被删除。
注意-你还可以更好地控制你想接受的数字值。我仍然记得一个旧的Struts信用卡银行应用程序,在其中我问我的经理,如果你想从你的卡中提取3e2欧元,预期的结果是什么。他们没有选择300(如Struts转换),而是选择了一个错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接