如何更改POST方法后JSP页面不会刷新的控制器方法。 Spring MVC,AJAX

时间:2016-02-20 14:34:23

标签: jquery ajax spring jsp post

  

这里我有AJAX脚本,我需要更正我的控制器

当我从表格中将数据发送到我的控制器时,我需要这样做,它不会刷新我的页面。 我的JSP页面上有一个<form>而AJAX <script>将我的数据从<textarea>传输到控制器方法,但它刷新了我的页面。如何做到这一点我的POST方法将无需刷新页面?感谢名单!

<form:form method="POST" modelAttribute="message" action="/app/user/messages/${iddialog}"
                        accept-charset="utf-8" ng-app="vandh" ng-controller="validateCtrl"
                        name="messageForm" novalidation="true">

<form:textarea path="text" class="form-control" rows="1" name="message"
                            id="message" ng-model="message" required="true"></form:textarea>
                        <div style="color: black"
                            ng-show="messageForm.message.$dirty && messageForm.message.$invalid">
                            <span ng-show="messageForm.message.$error.required"><spring:message
                                code="label.entermessage" /></span>
                        </div>
                        <br>
                        <div class="text-center">
                        <button class="btn btn-success" id="addMessage" name="addMessage"><spring:message
                                code="label.sendmessage"/></button>
                        </div>

</form:form>

<script>
$("#addMessage").click(function() { 
    var text = $('#message').val();
    $.ajax({ 
    type : "POST", 
    url: "/app/user/messages/${iddialog}" , 
    async : false, 
    data : { 
    text : text 
    } 
    }); 

    });
</script>   

这是我的POST方法的控制器方法。在这里,我正在检查我的消息并将其添加到数据库中。

public void sendMessage(int iddialog, String text, String messender) {
    DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    // get current date time with Date()
    Date date = new Date();
    System.out.println(dateFormat.format(date));
    Dialog dialog = new Dialog();
    dialog.setIddialog(iddialog);
    Message mess = new Message();
    mess.setText(text);
    mess.setDialog(dialog);
    mess.setDate(dateFormat.format(date));
    mess.setMessender(messender);
    this.messageService.addMessage(mess);
    this.dialogService.updateUnreadMessInfo(iddialog, messender);
}

public boolean checkingMessage(String text) {
    if (text.contains("<") || text.contains(">") || text.contains("script") || text.contains("$")) {
        return true;
    } else
        return false;
}

@RequestMapping(value = "/user/messages/{iddialog}", method = RequestMethod.POST)
public String messages(@ModelAttribute("message") Message message, @RequestParam(value = "text") String text,
        @PathVariable(value = "iddialog") int iddialog, Model model, Principal principal) {
    System.out.println("ITS HERE");
    if (checkingMessage(text) != true) {
        sendMessage(iddialog, text, principal.getName());

        System.out.println("message sent!");
        // return "redirect:/user/messages/"+iddialog;
        return "messagesWithUser";
    } else {
        return "redirect:/user/messages";
    }
}

1 个答案:

答案 0 :(得分:0)

上面的例子当你按#addMessage按钮时,正在发生两件事

  1. 表格提交(这就是为什么页面重新开始)
  2. 进行Ajax调用
  3. 为避免重新加载,请将表单的操作更改为action="javascript:void(0);"

    因此,您需要根据Ajax调用更改控制器,因为您使用Ajax发送该消息。