javabean中的日期或字符串声明

时间:2010-06-07 17:31:18

标签: java jsp web-applications servlets javabeans

我应该在javabean中声明一个属性,该属性包含用户在HTML表单上键入的日期值作为字符串或日期吗?

我觉得我应该声明为Date,但是,因为我对所有表单数据进行服务器验证,如果日期不验证,当我将表单bean传递回jsp视图进行更正时,我会丢失日期用户试图键入的值。

如果我声明为String,如果日期不验证,我可以在bean中设置字符串值并将bean传递回视图,用户可以看到他们错误输入的内容。

但是对于Date输入的String声明,我用DAO来预测问题。我希望能够使用DAO实用程序,它使用setObject生成一个prepare语句。

在我的html表单中,我请求日期为mm / dd / yyyy,在DAO中我使用的是Oracle Date。我不能使用hibernate等,因为这是一个企业内部网。

我应该遵循的最佳做法“模式”是什么?

3 个答案:

答案 0 :(得分:1)

只需将其存储为模型中的Date即可。只要模型值不存在,您就可以在EL中使用条件运算符来显示提交的值而不是模型值。

<input name="date" value="${empty bean.date ? fn:escapeXml(param.date) : bean.date}" />

JSTL fn:escapeXml()可以避免XSS attacks

为了更进一步,您可以添加一个Map<String, Object> params的额外图层,其中包含提交的值或最终/验证的值,具体取决于验证结果。

<input name="date" value="${fn:escapeXml(bean.params.date)}" />

答案 1 :(得分:0)

只需存储两者。它以字符串形式出现,所以保存在某个地方。然后验证它。如果失败,则将原始String传递回jsp页面。

答案 2 :(得分:0)

使用javascript掩码不让一个不可解析的日期首先到达服务器是我见过的最常见的模式。您还可以在开源JavaScript库中找到许多日期选择器。如果有人知道关闭javascript或以其他方式打败你的客户端验证,他们可能会处理在错误视图中没有得到他们的不可解析的日期字符串。