1

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

4

2 回答 2

1

如果您使用的是 IE(甚至是其他一些浏览器),请尝试在重定向代码段中放置一个随机数(如时间戳)作为参数:

 resp.sendRedirect("/myApplication.jsp?t="+timestamp);

IE 在这种情况下是臭名昭著的,并且由于大量缓存,事情并不总是按预期的方式工作。这个时间戳将指示浏览器不显示缓存页面,并且总是(希望)从服务器重新获取页面。

于 2012-05-01T04:39:42.390 回答
0

我发现问题在于 Google App Engine 的 High Replication Datastore (HDR) 是如何设计的。HDR 只能保证最终的一致性结果。

我在这里找到了更多信息

我证明这就是我看到差异的原因的方法是在添加记录之后立即计算持久性上的记录。

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

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

于 2012-05-02T03:26:25.837 回答