Struts 1 ActionForms-What';表中日期的约定是什么?
我将从使用Struts 1.2的e项目开始。没有计划转移到另一个框架 我想知道在表单中处理日期时的惯例是什么Struts 1 ActionForms-What';表中日期的约定是什么?,struts,conventions,struts-1,Struts,Conventions,Struts 1,我将从使用Struts 1.2的e项目开始。没有计划转移到另一个框架 我想知道在表单中处理日期时的惯例是什么 我应该创建一个日期变量并创建一个setDate(stringdate)方法来进行转换吗 创建一个日期变量,setDate(Date-Date)并在链中的某个位置注册一个特殊的转换器?(不知道是否可能) 创建一个字符串变量,一个setDate(stringdate),并让对actionformbean中validate方法的转换/验证 还是另一种方法 另外,如果您有任何建议来加快这个框架的
setDate(stringdate)
方法来进行转换吗setDate(Date-Date)
并在链中的某个位置注册一个特殊的转换器?(不知道是否可能)setDate(stringdate)
,并让对actionformbean中validate
方法的转换/验证另外,如果您有任何建议来加快这个框架的速度,我将非常感谢。在我回答您的问题之前,让我先说一句:人们不了解ActionForm是什么或ActionForm做什么 表示用户在HTML表单中填写的数据。Struts读入请求参数,并按名称将它们与submit的目标操作配置的ActionForm进行匹配。它是用户输入的数据,简单明了 请求中的数据总是java.lang.String类型的。但是人们可能有一个名为“age”的表单字段,它在模型数据中是一个int。或者,他们的模型数据中有一个“生日”,当然是java.util.Date,而不是“年龄”。因此,他们认为最好将int和Date类型放在ActionForm上,并允许Struts将请求时到达的字符串转换为int和Dates 这是一个非常有用的转换,作为开发人员,您不必处理它,Struts可以。这是一个小小的框架魔法 但这不是哈利波特转换可能会在整数和日期失败。为什么? int是一种基本类型,因此它必须始终具有一个值。默认初始化为零。在执行绑定(请求参数到ActionForm对象属性)时,Struts会在ActionForm上看到一个int类型,并尝试将请求字符串值转换为int 如果用户插入字符串“5”,则该字段设置为5。那很好 但如果用户插入了“bla”怎么办?我们是否会面临一个异常?不!由于转换(静默)失败,我们返回的值为零<坚强>坚强强> 日期也是一个问题。为什么?因为它们的值在请求时以字符串的形式到达。他们的格式可能很简单,比如“12/01/2011”,作为信息完全没有用处。为什么?因为表示为字符串的日期必须与a同步,才能转换为它表示的正确日期实例
"12/01/2011" + Locale.US = 01 December 2011
"12/01/2011" + Locale.FRENCH = 12 January 2011
Ups强>
好的,这就是介绍现在让我们转到您的问题
getDate()
。如果getter返回日期,用户输入的“12/01/2011”可能显示为“2011年1月12日00:00:00”(Struts将对getter值执行toString()
)。因此,实际上需要Date字段同时具有Date类型的setter/getter和String类型的setter/getter。在Action类中使用类型Date,并使用字符串与视图标记交互
问题?如何在ActionForm中处理适当的区域设置值
validate
方法。当你到达这一点的时候已经很晚了。Struts完成了转换。如果您有一个值为零的int类型字段,则无法知道用户是否实际插入了零并进行了转换,或者用户是否插入了“bla”且转换失败,并且您返回了零作为默认初始化值。如果零是应用程序的有效值,那么您将面临更大的麻烦
那么惯例是什么呢?
没有惯例。根据您的情况使用上述信息并运用常识。
理想情况下,ActionForm中的所有属性都应为字符串,以便在绑定过程中不会丢失任何信息。但这涉及到在使用属性之前将属性手动转换为Action类中的适当类型。您拥有完全的控制权(Struts不再进行转换,因为源和目标值的类型为String),但您还需要编写大量的锅炉板代码,以便以适当的方式进行转换,这在某些情况下可能会变得烦人
在我结束这段对话并上床睡觉之前(在我的国家是凌晨1:00:D),我只想提一件人们通常看不到的事情ActionForm不是模型的一部分,也不应直接与模型交互
如果需要在模型中处理ActionForm中的数据,则将其映射为与模型DTO(数据传输对象)的一对一关系。如果没有,则在模型和Stru之间创建紧密耦合