1

システムに挿入された新しいエントリのリストを表示する JSP ページがあります。

私の myApplication.jsp は次のように構成されています。

A list of entries in the system
A form with textboxes that submits new entries.

JSP がサブミットすると、次の処理を行うサーブレット クラスが呼び出されます。

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

数回、出力でカウントが増加せず、2 増加することもありました (古いレコードと新しいレコードが追加されました...)。

于 2012-05-02T03:26:25.837 に答える