6

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

此外,如果一个属性是整数类型,并且用户输入的值不是整数值,Struts 会默默地接受它,只是不设置属性。这是怎么回事?

4

2 回答 2

5

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

于 2008-10-16T17:35:40.877 回答
3

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

客户端验证(例如在 Javascript 中)仍然可以工作,但您不想依赖它。

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

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

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

于 2008-10-16T17:49:48.383 回答