当我使用 JSP 表单写入 PostgreSQL 时,我在处理日期变量时遇到了问题。有一些很棒的提示,但仍然无法正确使用。我相信我正在将一个字符串从 JSP 传递到 JAVA,它是一个日期“setter”和“getter”在“没有时区的日期”列上写入 PSQL。
以下是与日期相关的部分JSP 代码:
....(一些代码)....
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
....(模式代码)....
<%
if (action.equals("add")) {
.
.
.
newCampaign.setCampempDate(dateFormat.parse(request.getParameter("campemp")));
newCampaign.add();
}
%>
....(更多代码)....
<input name="campemp" type="text" class="datePickBox" id="campemp"
onBlur="javascript:checkFormat(this)" value="<%= defaultCampaign.getCampempDate() != null
? dateFormat.format(defaultCampaign.getCampempDate()) : dateFormat.format(new
java.util.Date()) %>" size=20>
....(其余代码)....
值得一提的是,在输入时我还使用了一个以正确格式传递日期的日历……这是我在 JSP 端使用日期字段的另一个原因。
在 JAVA 方面:
....(一些代码)....
private java.util.Date campemp= null;
private SimpleDateFormat userDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
...(更多代码)... ++ 设置和获取 ++
public void setCampempDate(java.util.Date aCampemp) {
this.campemp= aCampemp;
}
public java.util.Date getCampempDate() {
return this.campemp;
}
...(更多代码)... ++ 加载 ++
public void load(ResultSet rs) throws SQLException {
this.setId(rs.getLong("campkeydbid"));
.
.
this.setCampempDate(rs.getDate("campemp"));
}
...(更多代码)... ++ 写入数据库 ++
public boolean add() throws SQLException {
boolean success = false;
if (costingEnabled) {
String call = "select " + getStoredProcedureMapper().getPrefix() + "_Add(?,?,?,?,?,?,?,?,?,?)";
DataSource ds = PoolMan.findDataSource("mydatabase");
Connection conn = null;
try {
conn = ds.getConnection();
PreparedStatement pst = conn.prepareStatement(call);
.
.
pst.setTimestamp(10, new Timestamp(this.getCampempDate().getTime()));
ResultSet rs = pst.executeQuery();
if (rs.next()) {
.
.
...(更多代码)...
存储过程上的“_Add”是正确的,因为如果我“硬编码” pst.SetTimestamp 上的日期,它就可以工作
我得到的错误如下:
org.apache.jasper.JasperException:无法将字符串“04/07/2012 19:12”转换为属性“campemp”的类“java.util.Date”:属性编辑器未向 PropertyEditorManager 注册
任何关于将字符串解析为日期而不影响数据库日期字段和 JSP 输入的解决方法的想法将不胜感激.. 非常感谢。
问候,
抢