我有一个JSP页面,显示系统中插入的新条目列表。
我的myApplication.jsp的结构如下:
A list of entries in the system
A form with textboxes that submits new entries.
当我提交JSP时,它会调用我的servlet类:
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String author = checkNull(req.getParameter("author"));
String service = checkNull(req.getParameter("service"));
Dao.INSTANCE.add(author, service);
resp.sendRedirect("/myApplication.jsp");
}
我的Dao.Add看起来像这样:
public void add(String author,String service) {
synchronized (this) {
EntityManager em = EMFService.get().createEntityManager();
Shortly shortly = new Shortly(author, service);
em.persist(shortly);
em.close();
}
}
我遇到的问题是当我被重定向回myApplication.jsp
时,列表中没有显示我添加的新条目。
当我刷新页面时,它会显示。
答案 0 :(得分:1)
如果您使用的是IE(或者其他一些浏览器),请尝试将随机数(如时间戳)作为参数放在重定向代码段中:
resp.sendRedirect("/myApplication.jsp?t="+timestamp);
IE在这种情况下是臭名昭着的,并且由于缓慢的缓存,事情并不总是按照预期的方式工作。此时间戳将指示浏览器不显示缓存页面,并且将始终(希望)重新从服务器获取页面。
答案 1 :(得分:0)
我发现问题在于如何设计Google App Engine的高复制数据存储区(HDR)。 HDR只能保证Eventual consistency结果。
我找到了更多信息here
我证明这就是我看到差异的原因,就是在添加记录后直接计算持久性记录。
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String author = checkNull(req.getParameter("author"));
String service = checkNull(req.getParameter("service"));
Dao.INSTANCE.add(author, service);
List shortlys = new ArrayList();
shortlys = Dao.INSTANCE.getShortlys("default");
System.out.println("Shortlys count is: " + shortlys.size());
resp.sendRedirect("/myApplication.jsp");
}
有几次,输出没有增加计数,有时它增加了两个(旧记录,新记录增加......)