Struts2 struts 2中的beans属性和模型驱动
我是struts 2的新手。我创建了一个action类,该类使用Struts2 struts 2中的beans属性和模型驱动,struts2,Struts2,我是struts 2的新手。我创建了一个action类,该类使用ModelDriven接口将数据从JSP页面插入bean 问题是我在bean中有一些非“String属性,比如Long,Date`。。。等 问题是: 当我在jsp页面中按下submit按钮时,我得到一个错误,说它没有找到该特定属性的字符串设置器。 例如,如果我的豆子里有 当执行实现模型驱动的action类时,它会触发一个运行时异常 java.lang.NoSuchMethodException: com.hsms.as
ModelDriven
接口将数据从JSP页面插入bean
问题是我在bean中有一些非“String属性,比如
Long,
Date`。。。等
问题是:
当我在jsp页面中按下submit按钮时,我得到一个错误,说它没有找到该特定属性的字符串设置器。
例如,如果我的豆子里有
当执行实现模型驱动的action类时,它会触发一个运行时异常
java.lang.NoSuchMethodException: com.hsms.aseza.enteringApproval.EnteringApproval.setApprovalDate([Ljava.lang.String;)
在不为我的Date
属性编写字符串设置器的情况下,是否仍然可以解决此问题
Private YourBean bean = new YourBean();
或者你可以把它放在构造函数中date
,请使用datepicker
例如sx:datetimepicker
或sj:datepicker
编辑: 试用:
<s:textfield key="objEnteringApproval.approvalDate"></s:textfield>
其中objEnteringApproval是控制器中的公共可访问变量。我认为您的问题在于转换,即从字符串转换为
java.util.Date
对象。这扩展了负责从字符串转换为其他类型(如Long、Double等)的字符串。如果检查源代码,则不会看到java.util.Date
或java.sql.Date
的任何转换。因此,我认为您应该为approvalDate
编写一个转换器。我在此将指导您的程序,您所需要的只是编辑代码以满足您的需要
在jsp上,遵循以下示例
使用与jsp中显示日期相同的格式,即日期格式,在转换器的convertFromString
方法中进行转换,并返回转换后的java.util.date
或java.sql.date
如果您在实现这一点时遇到问题,请告诉我。给出您的操作代码,Bean,JSP,您将得到答案。Quick.hi,这应该不是问题,您也可以使用
s:property
打印date@user1512999使用,其中objEnteringApproval是控制器中的公共可访问变量。s:date是用于输出的,当我使用modeldrivengeter和setter将日期从jsp映射到操作时会出现问题,对于datepicker,我使用的是textfeild+JS calendar。好吧,你所说的是我昨天发现的,为了更清楚地思考,如果我的月日大于12,隐式转换将失败。正如你所说的,解决方案是实现自定义转换器,我阅读了如何实现,但正如我所读到的,我必须为每个类制作一个转换器,现在的问题是如何制作全局转换器,换句话说,我想要一个转换器,而不仅仅是针对这个属性“approvalDate”,我想要一个转换器,它可以使用简单的日期格式转换为日期,只要它找到一个字符串,就可以转换为日期。如果我将月份天数大于12,那么它失败的原因是struts处理的隐式转换将基于我的本地系统日期格式进行转换。在我的本地系统中,格式是mm/dd/yyyy,因此正如您所说,我需要自定义转换器,但我需要全局格式。我不想在每个需要转换的地方复制转换器,为什么不把它放在全局位置,需要它的每一个动作都会引用它呢it@user1512999它为整个应用程序转换日期的每个实例。在xwork conversion.properties
中配置java.util.Date
后,它将适用于所有java.util.Date
属性,无论该属性是在ModelDriven
bean中还是在action类中。您不需要对java.util.Date
的每个实例都这样做。莫雷索,请遵循我帖子中的例子。我想那会有帮助的。这样,您就不必在每个实例中都这样做。希望这更清楚。如果您有问题,请告诉我。查看此帖子了解如何使用它。
<s:textfield key="objEnteringApproval.approvalDate"></s:textfield>