0

フォームを送信し、データを DB にプッシュし、サーブレットの成功/エラー メッセージで終了することができます。しかし、関連する結果を含むフォーム html にリダイレクトする必要があります。

1) 成功オーバーレイ(トリガーされる既存の JavaScript メソッド) とすべてのフォーム フィールドが空

2) エラー メッセージ(フォーム フィールドにまだ入力値が含まれている場合)

これらは私が現在持っているコードとファイルです(抽出):

フォーム.java

protected void contructAndSendResponse(HttpServletResponse response, String responseStatus, String... responseErrorCodes) throws Exception {
    StringBuilder responseMsg = new StringBuilder();
    responseMsg.append(Form.RESPONSE_DATA_STATUS);
    responseMsg.append(responseStatus);
    if (responseErrorCodes == null || responseErrorCodes.length == 0) {
        responseMsg.append(Form.JSON_CLOSE_OBJECT);
    }
    else {
        responseMsg.append(Form.RESPONSE_DATA_ERROR_CODE);
        responseMsg.append(Form.JSON_BEGIN_ARRAY);
        int errorCodeLength = responseErrorCodes.length;
        for (int i = 0; i < errorCodeLength; i++) {
            responseMsg.append(Form.JSON_DOUBLE_QUOTE);
            responseMsg.append(responseErrorCodes[i]);
            responseMsg.append(Form.JSON_DOUBLE_QUOTE);
            if (i < errorCodeLength - 1) {
                responseMsg.append(Form.JSON_COMMA);
            }
        }
        responseMsg.append(Form.JSON_END_ARRAY);
        responseMsg.append(Form.JSON_CLOSE_OBJECT);
    }
    contructAndSendResponse(response, responseMsg.toString());
}

protected void contructAndSendResponse(HttpServletResponse response, String responseMsg) throws Exception {
    ServletOutputStream outStream = response.getOutputStream();
    response.setContentType(Util.CONTENT_TYPE_JSON);
    outStream.print(responseMsg);
    outStream.flush();
    outStream.close();
}

public void returnResponse(HttpServletResponse response, String responseStatus, String... responseErrorCodes) {
    try {
        contructAndSendResponse(response, responseStatus, responseErrorCodes);
    }
    catch (Exception e) {
    }
}

サーブレット.java

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

private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Form onlineForm = null;
    List<String> errorCodes = new ArrayList<String>();
    try {
        onlineForm = FormFactory.getInstance().createObject(formtype);
        onlineForm.extractRequest(request);
        errorCodes = onlineForm.validateInputParam();
        if (errorCodes == null || errorCodes.isEmpty()) {
            Connection conn = PersistentFactory.getInstance().openConnection();
            responseStatus = Form.RESPONSE_DATA_STATUS_SUCCESS;
            PersistentFactory.getInstance().closeConnection(conn);
        }
    }
    catch (Exception e) {
        errorCodes.add(EntityUtils.ErrorCode.E1.name());
    }
    onlineForm.returnResponse(response, responseStatus, errorCodes.toArray(new String[0]));
}

フォーム.jsp

<form id="form" action="/projectx/form?type=contact" class="custom-ui" method="POST" >
    ....
</form>
<script type="text/javascript">
function overlay(){
        Projectx.modalDialog({
            elem: "#form",
            title: "Success",
            body: "Thank you",
            tpl: "modal-tpl"
        });
    }
</script>

これらを試しましたが、上記のコードではリダイレクトが機能しませんでした:

- dispatcher.forward(request,response);
- forward(responsePage, aRequest, aResponse);
- redirect(responsePage, response); 
4

1 に答える 1

0

簡単な解決策を見つけました。サーバー側が json 応答を返していたので、クライアント側 (js) スクリプトを次のように変更しました。

$("#form").click(function(){
   $.ajax({
       url: '/projectx/servlet',
       type: 'POST',
       data: $('#form').serialize(),
       success:function(data){
          if(data.status=="success"){
               success();
               $("#form").trigger("reset");
          }else{
               checkagain();
          }
       },
       error:function(data){
           error();
       }
    });
});
于 2013-11-06T08:14:43.903 に答える