1

私はこのシナリオを持っています:

添付ファイルをサーバーにアップロードする必要があります。リクエストを処理するjsp pageと があります。servletファイルをアップロードする前に、重複したファイル名を確認して、ユーザーに通知せずにファイルを置き換えないようにする必要があります。したがって、私のサーブレットでは、適切なチェックを行い、arequest attributeを true に設定forward the request to the jsp pageして、属性が true に設定されていることを確認すると、(jquery を使用して) ユーザーにダイアログを表示し、ユーザーがどのアクションを選択するかを選択します。 (両方保持、上書き、キャンセル)。

私が持っている唯一の懸念はsame request is submitted、属性がtrueに設定された後、ページが更新されたとき、つまり、attribute remains true更新時にダイアログが読み込まれることです。もちろん、私はこれが起こることを望んでいません。

これを回避するのに役立つものはありますか? これは私が持っているコードです。

UploadFile.java - 私のサーブレット

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    processRequest(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws    ServletException, IOException {
    processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException
{
     request.setAttribute("duplicate", null);

     if (!isDuplicate(file)){
        // .. handle uploading 
     } 
     else 
     {
        // if duplicate
        request.setAttribute("duplicate", "true");

        ServletContext context = getServletContext();
        RequestDispatcher dispatcher = context.getRequestDispatcher("/ticketsform.jsp");
        dispatcher.forward(request, response);
     }

     response.sendRedirect("ticketform.jsp");
}

ticketform.jsp

<% 
    String isDuplicate = (String)request.getAttribute("duplicate"); 

    if (isDuplicate != null)
    {   %>
        <script type="text/javascript">
            duplicateFilesOption(); // call js function to display dialog
        </script>
<%  }   %>

事前に助けてくれてありがとう:)

4

2 に答える 2

0

ticketform.jsp の最後にある属性を削除してください。

request.removeAttribute("attribute_name");

したがって、最初にリクエストから値を取得した後、最後に毎回削除されます。

于 2013-07-25T11:35:11.537 に答える
0

以下を jsp に追加できます。

これにより、ブラウザは結果を再表示するのではなく、リクエストを再送信するように指示されます。

<head>   
<meta HTTP-EQUIV=Expires CONTENT="0">   
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">  
<head>
于 2013-07-25T09:15:53.713 に答える