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

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

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top