保存后,网页不显示新条目。仅在刷新后出现

时间:2012-05-01 02:00:12

标签: java google-app-engine jsp

我有一个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时,列表中没有显示我添加的新条目。 当我刷新页面时,它会显示。

2 个答案:

答案 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");
}

有几次,输出没有增加计数,有时它增加了两个(旧记录,新记录增加......)