java - Wicket:从表单设置 JodaDateTime

标签 java forms hibernate wicket

我正在使用 wicket 和 hibernate 来开发网站。我只是想保存表单的一些数据。 我的对象是这样的:

@Entity
@Table(name = "PRODUCT")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISCRIMINATOR",discriminatorType=DiscriminatorType.STRING )
@DiscriminatorValue(value="product")
public class Product implements Serializable {

@Id
@GeneratedValue
@Column(name = "PRODUCT_ID")
private int productID;

@Column(name = "START_DATE")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime startDate;

public DateTime getStartDate() {
    return startDate;
}

public void setStartDate(DateTime startDate) {
    this.startDate = startDate;
}
}

我有一个表单,其中表单内有几个输入字段。对于我使用的日期字段:

DatePicker datePicker = new DatePicker();
DateConverter dateConverter = new PatternDateConverter ( "dd.MM.yyyy", false );

final DateTextField startDate = new DateTextField("startDate",dateConverter);
startDate.add(datePicker);

如果我提交表单,我会收到此异常:

 Last cause: Could not convert value: 08.10.14 to type: org.joda.time.DateTime. Could not find     compatible converter.
WicketMessage: Method onFormSubmitted of interface     org.apache.wicket.markup.html.form.IFormSubmitListener targeted at [Form [Component id = form]] on     component [Form [Component id = form]] threw an exception

我猜这是因为 wicket 使用 startDate 的 setter 。但我该如何编辑它呢?

最佳答案

如果您的表单使用CompoundPropertyModel,那么表单组件将搜索真实模型对象的相应字段,并将值应用到(表单组件的wicket:id必须等于模型字段的名称,并且该字段的类型必须与表单组件返回的类型相同)。

但是如果模型中没有对应的字段,或者我们想使用独立的表单组件,那么我们只需要为该组件使用另一个模型即可。

出现异常的原因是 DateTextField 在转换后返回 Date 并且您的模型具有 DateTime 字段。

因此,您至少有两种方法来处理这个问题:

  1. 在我的评论中描述了为此字段使用自定义模型并将 Date 值(通过 onSubmit 方法从表单组件获取)转换为 DateTime 对象。
  2. 但是,我认为最好使用您自己的转换器。您可以强制 DateTextField 返回模型的 DateTime 对象。看herehere (请参阅 src 中的 URL TextField)以更好地了解如何实现此目的。您可以依靠 org.apache.wicket.datetime.DateConverter src 实现自己的转换器。

关于java - Wicket:从表单设置 JodaDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259963/

相关文章:

java - 值 '0000-00-00' 不能表示为 java.sql.Date

java - JPQL 与字符串函数不同

java - 字符串内存模型

javascript - Material UI 多选中的可删除芯片

java - 从 Linux 上的 Java 访问 PC 硬件端口

jQuery Submit() 在 FF/Chrome 中有效(如预期),但在 IE/Opera 中无效,有什么想法吗?

php - Symfony2 中同一实体的不同验证规则

java - Hibernate关系注释

java - RxJava 主题和错误处理

java - 设计模式 : avoid switch to decide which service call