以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由于Java中日期时间类型(Date和Time)在序列化和反序列化时存在一些兼容性问题。在你的例子中,你尝试将一个日期字符串("2015-9-11")直接赋给Long
类型的变量date1
,这会导致编译错误。
正确的做法是在获取到日期后进行相应的处理,比如将其转换为毫秒表示形式(例如new Date(1447830400000L)
),然后再将其设置回date1
。这样可以避免出现类似的问题。
以下是修改后的代码示例:
import java.util.Date;
import org.apache.struts2.convention.annotation.*;
@Action("/set_date")
@Results({
@Result(name="success", type="json"),
@Result(name="error", type="json")
})
public class SetDateAction extends ActionSupport {
private static final long serialVersionUID = -6434463484493699217L;
@FormParam("date1")
private String date1;
@FormParam("date2")
private String date2;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Date date1 = null;
Date date2 = null;
try {
date1 = parseDate(request.getParameter("date1"));
date2 = parseDate(request.getParameter("date2"));
request.setAttribute("date1", date1);
request.setAttribute("date2", date2);
// 设置成功响应
request.setAttribute("success", true);
} catch (ParseException e) {
// 设置错误响应
request.setAttribute("success", false);
request.setAttribute("error", "Invalid date format");
}
}
private Date parseDate(String dateString) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(dateString);
}
}
在这个例子中,我们首先尝试从请求参数中解析日期。如果解析失败,我们将抛出一个ParseException
并返回一个错误响应。否则,我们使用request.getAttribute()
来获取两个日期对象,并将它们传递给视图。这样,你可以看到date1
和date2
都是有效的日期对象。