如何从jsp向Struts2动作输入Date?

我在jsp页面中遇到了很多问题。 我应该使用什么标签从用户获取日期(yyyy-MM-dd)并将其存储在Struts2操作的Date属性中?

我的操作中的属性声明为java.util.Date。 我希望jsp页面的输入落在这个属性中。

请帮忙。

我得到无效字段错误(在JSP中),如果用作:textfield标签,以正确的格式输入日期。

我知道这篇文章有点旧,但解决方案可能对其他人有用。

Struts的默认转换器似乎无法正常工作。 即使从操作填充的只读字段,也会发生字段错误。

我通过定义自己的转换器来解决它:

  1. 创建转换器类(使用您需要的日期格式):

    public class StringToDateTimeConverter extends StrutsTypeConverter { // WARNING not safe in multi-threaded environments private static final DateFormat DATETIME_FORMAT = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss"); public Object convertFromString(Map context, String[] strings, Class toClass) { if (strings == null || strings.length == 0 || strings[0].trim().length() == 0) { return null; } try { return DATETIME_FORMAT.parse(strings[0]); } catch (ParseException e) { throw new TypeConversionException("Unable to convert given object to date: " + strings[0]); } } public String convertToString(Map context, Object date) { if (date != null && date instanceof Date) { return DATETIME_FORMAT.format(date); } else { return null; } } } 
  2. 将转换注释放在属性设置器上(或使用conversion.properties文件)

     @Conversion() public class MyEditAction { // ... @TypeConversion(converter="my.app.common.converter.StringToDateTimeConverter") public void setUploadedDate(Date uploadedDate) { this.uploadedDate = uploadedDate; } 

在我的情况下,我不需要编辑它,但想在jsp中指定格式。 我使用了一个额外的隐藏字段来保持原始值(另一种替代方法是使用Preparable接口):

   

这就是我解决这个问题的方法。

    

在您的消息属性中键/值:

 struts.date.format=dd/MM/yyyy 

这表示默认格式,您不必在每个日期标记中写入。

希望这可以帮助

所以也许我不明白这个问题。 但我希望这个例子有所帮助(顺便说一句,这段代码不会起作用,只是为了让你了解sturts2是如何发挥作用的); 因此,对于表单输入,您需要在java中拥有holder类,因此您可以从您的操作类调用您的日期,例如Holder.java:

 public class Holder{ pirvate Date date; public getDate(){ return date; } public setDate(Date date){ this.date = date; } } 

你的Holder.javavalidation,所以你可以确保它的日期Holder-validation.xml:

          

您调用的动作类确保holder.getdate获取日期getDateAction.java:

 private Holder holder; public class getDateAction{ public String execute(){ //get your date Date date = holder.getDate(); return SUCCESS; } } 

您的jsp表单,您可以让客户端输入日期。 确保输入name =“holder.date”。 这是site.jsp:

    

最后但并非最不重要的是你的struts.xml:

      example.jsp    

这里有Struts2日期格式的解释: Struts 2 Date Format Examples

但我相信你在jsp中寻找的标签是

  

其中Date_Name是Java中的Date对象。

标记仅显示日期 – 它不提供输入。

我不相信Struts提供开箱即用的日期输入,除非您使用日期时间选择器,这是一个dojo / javascript标记。 有关这方面的更多信息,请访问: http : //struts.apache.org/2.0.14/docs/datetimepicker.html

如果您不沿着这条路走下去,您很可能需要将JSP上的日期映射到字符串,然后在操作类中对其进行格式化。 您可以通过让Struts首先validation值来简化这一过程。

JSP:

  

?的.properties

 format.date={0,date,dd/MM/yyyy} 

Action.java

 import java.util.Date; private Date date; public void setDate(Date date) { this.date = date; } 

脚本:您可以添加jquery.datepicker(我不建议使用struts datepicker): http : //jqueryui.com/datepicker/

 $("#date").datepicker({dateFormat: dateFormat}); 
 private Date date; public void setDate(String date) { //setter method param type is String try { this.date=new SimpleDateFormat("yyyy-MM-dd").parse(date); } catch (ParseException e) { e.printStackTrace(); } } 

有一个解决方案,我试过,它的工作:)
1)仅在“DATE”数据类型的数据库表中保存要存储日期的列。 2)在JSP页面中仅使用Textfield标签。不要使用Date标签。
注意 :确保仅通过在textfield标记中放置占位符,使用户输入日期为YYYY-MM-DD格式!
3)保留变量以仅访问字符串类型的字段。不要使用DATE数据类型。
4)现在运行查询: 从tablename中选择DATE_FORMAT(datecolumnname,’%d /%m%/ Y’)作为date_two; 即使在表格中以YYYY-MM-DD格式存储,您也将从该列中获取dd / mm / yyyy格式的日期。
5)你也可以比较你的日期列的数据与curdate()和相关的function,它的工作原理:)。
6)像我使用的查询: 从tablename中选择id,name,DATE_FORMAT(datecolumnname,’%d /%m /%Y’)作为datecolumn2,其中datecolumnname> = curdate();