Struts 1 ActionForms-What';表中日期的约定是什么?

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方法的转换/验证 还是另一种方法 另外,如果您有任何建议来加快这个框架的

我将从使用Struts 1.2的e项目开始。没有计划转移到另一个框架

我想知道在表单中处理日期时的惯例是什么

  • 我应该创建一个日期变量并创建一个
    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

    好的,这就是介绍现在让我们转到您的问题

  • 我是否应该创建一个日期变量并创建一个setDate(stringdate)方法来进行转换
  • 在某个时刻,您必须将日期发送回视图,并且通常必须选择返回字符串的
    getDate()
    。如果getter返回日期,用户输入的“12/01/2011”可能显示为“2011年1月12日00:00:00”(Struts将对getter值执行
    toString()
    )。因此,实际上需要Date字段同时具有Date类型的setter/getter和String类型的setter/getter。在Action类中使用类型Date,并使用字符串与视图标记交互

    问题?如何在ActionForm中处理适当的区域设置值

  • 创建一个日期变量,一个setDate(Date-Date),并在链中的某个位置注册一个特殊的转换器(不知道是否可能)
  • 。您可以创建并注册一个自定义转换器,该转换器可能采用日期的字符串表示形式,并将其转换为日期。如果你使用这种格式,我想你会安全的

    问题?您是否可以在现有应用程序中使用此功能,而不破坏通过使用各种格式或区域设置以自己的方式将字符串转换为日期的代码

  • 创建一个字符串变量,一个setDate(stringDate),并允许对ActionFormbean中的validate方法进行转换/验证
  • 这行不通。在ActionForm对象上的参数绑定之后调用
    validate
    方法。当你到达这一点的时候已经很晚了。Struts完成了转换。如果您有一个值为零的int类型字段,则无法知道用户是否实际插入了零并进行了转换,或者用户是否插入了“bla”且转换失败,并且您返回了零作为默认初始化值。如果零是应用程序的有效值,那么您将面临更大的麻烦

    那么惯例是什么呢?

    没有惯例。根据您的情况使用上述信息并运用常识。

    理想情况下,ActionForm中的所有属性都应为字符串,以便在绑定过程中不会丢失任何信息。但这涉及到在使用属性之前将属性手动转换为Action类中的适当类型。您拥有完全的控制权(Struts不再进行转换,因为源和目标值的类型为String),但您还需要编写大量的锅炉板代码,以便以适当的方式进行转换,这在某些情况下可能会变得烦人

    在我结束这段对话并上床睡觉之前(在我的国家是凌晨1:00:D),我只想提一件人们通常看不到的事情ActionForm不是模型的一部分,也不应直接与模型交互

    如果需要在模型中处理ActionForm中的数据,则将其映射为与模型DTO(数据传输对象)的一对一关系。如果没有,则在模型和Stru之间创建紧密耦合