springboot无法跳转页面的问题解决方案

首先我登录页面直接通过浏览器请求直接访问的,项目结构如图所示

登录页面

<form action="index" id="frm">
  <input type="text" name="dname">
  <input type="text" name="loc">
  <input type="button" value="提交" id="but" ></form>
<script src="js/jquery-1.12.2.js"></script>
<script>
  $(function () {
    $("#but").click(function(){
      var data = $("#frm").serialize();
      $.get("index",data);
    })
  })
</script>

点击提交后,是一个ajax发送表单里面的数据,请求地址为index,会去数据库里面查询是否有这个人(后端采用mybatis去数据库查询),根据返回的结果,跳到相应的页面去,我在controller里面写的index请求的java代码为:

//  登录
  @GetMapping("index")
  public String addDept(Dept dept) {
    log.info("dept===" + dept);
    List<Dept> depts = deptService.selectDept(dept);
    if (depts != null) {
      return "index";
    } else {
      return "error";
    }
  }

意外的事情出现了,有查询结果出来,而且也进入了if判断,但就是没有跳转页面,这个问题困惑了许久,一直没想到问题出现在哪里,百度了很多,其中百度给的结果有以下几点:

注解使用@Controller 而不是@RestController,因为使用@RestController会返回“index”字符串
首先在pom文件中引入模板引擎jar包,即:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在application.properties中配置模板引擎

spring.thymeleaf.prefix=classpath:/templates/

不加@responseBody注解,因为加了之后会返回一个字符串的形式;
以上的这些坑,我都试了,最后还是没有失败,但是我直接在浏览器上输入index请求,会跳转到index.html的页面上面去,我就很纳闷了,还是不知道我的问题出现在哪里

我的index.html的页面如下,用ajax请求,调用去数据库查询所有人的请求,代码如下:

index页面
<script src="../js/jquery-1.12.2.js"></script>
<script>
  selectDept()
  function selectDept() {
    $.get("getDept",callSelectDept,"JSON")
    function callSelectDept(data) {
      var str=""
      for (var i =0;i<data.length;i++){
        str+=data[i].deptno+"---"+data[i].dname+"---"+data[i].loc+
          "<a href=deleteDept?deptno='"+data[i].deptno+"'>删除</a>"+
          "<a href=updateDept?deptno='"+data[i].deptno+"'>修改</a>"
          +"<br/>"
      }
      $("#queryDept").append(str)
    }
  }

当通过浏览器访问index.html后,会显示出来数据,这里是没有问题的

后来过了一段时间吧,才想起来是不是ajax请求调用方法后,在java后端发送跳转页面请求后,不能跳转页面,因为ajax默认是异步请求嘛.代码如下

$.ajax({
        asyn:false,
        url:"index",
        type:"get",
        data:data
      })

后来将ajax请求改为同步之后,还是失败,最后,将提交表单的方式改为summit,成功!!!

 <form action="index" id="frm">
   <input type="text" name="dname">
   <input type="text" name="loc">
   <input type="submit" value="提交" ></form>

总结:ajax请求最好只用于发送数据,和从后端拿数据,不要做跳转页面的...如果一定要做页面的跳转,可以约定后端放回的数据为1或0,当返回的数据为1时,用Windows.location.href="index.html" rel="external nofollow" rel="external nofollow" 来跳转

具体代码如下:

function callback(dat){
       if (dat=1){
          window.location.href="index.html" rel="external nofollow" rel="external nofollow"
        }else {
          alert("1")
        }

否则就用submit提交,记住了,ajax用于发送请求到那个方法后,后端是跳转不了页面的,也不会报错,因为ajax用于默认是异步请求,如果要跳就在前端跳转页面也是可以的

这个坑记录下来,为后来的你们给与一些建议!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring boot 跳转到jsp页面的实现方法

    本人正在学习Spring boot,搜索了很多关于Spring boot 跳转到jsp页面的实现方法介绍,下面我来记录一下,有需要了解的朋友可参考.希望此文章对各位有所帮助. @Controller注解 1.application.properties文件中配置 # 配置jsp文件的位置,默认位置为:src/main/webapp spring.mvc.view.prefix=/pages/ # 配置jsp文件的后缀 spring.mvc.view.suffix=.jsp 2.Controlle

  • spring boot整合jsp及设置启动页面的方法

    前言 这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf,但是Spring boot整合jsp的过程已经完成,在这里记录一下. 本文基于springboot2.0.4最新版本 spring官方推荐Thymeleaf但是还是有很多javaweb朋友习惯使用jsp虽然现在jsp有点out.本节教程

  • Springboot访问html页面的教程详解

    1. 在原有的项目resouces目录下创建static包,并在static下创建pages,然后在pages包下hello.html. 这时你会发现hello.html并没有在static中,它跑哪去了呢?打开src下的webapp,发现有一个hello.htm,删除web.xml,并将hello.html用鼠标左键移到static目录下; hello.html代码: <!DOCTYPE html> <html> <head> <meta charset=&qu

  • Spring Boot的Controller控制层和页面

    一.项目实例 1.项目结构 2.项目代码 1).ActionController.Java: package com.example.controller; import java.util.Date; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.spring

  • SpringBoot设置首页(默认页)跳转功能的实现方案

    先给大家介绍下SpringBoot设置首页(默认页)跳转功能 最近springboot开发需要设置个默认页面,就相当于我访问http://www.back.order.baidu.com要直接跳转到登录页面. 方案1:controller里添加一个"/"的映射路径 @RequestMapping("/") public String index(Model model, HttpServletResponse response) { model.addAttribu

  • springboot如何使用thymeleaf模板访问html页面

    引言 在传统的web开发中通常使用jsp页面,首先需要在pom文件中引入springmvc相关的包,然后写springmvc的配置文件(包括访问资源的路径解析),之后还需再web.xml中配置访问路由.这无疑太麻烦了,每次开发前都需要编写大量的配置文件. springboot为此提供了高效便捷的解决方案,只需再pom.xml中添加web开发的依赖,便可进行web开发,省去了繁琐的配置步骤. 下面为web开发引入的依赖 <dependency> <groupId>org.spring

  • spring boot使用thymeleaf跳转页面实例代码

    前言 在学习springboot 之后想结合着html做个小demo,无奈一直没掌握窍门,在多番的搜索和尝试下终于找到了配置的方法,使用thymeleaf做事前端页面模板,不能使用纯html. thymeleaf介绍 Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎. Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 - 可以在浏览器中正确显示HTML,还可以作为静态原型工作,从而在开发团队中进行更强大的协作. 使用Spring Framework的模块,

  • springboot无法跳转页面的问题解决方案

    首先我登录页面直接通过浏览器请求直接访问的,项目结构如图所示 登录页面 <form action="index" id="frm"> <input type="text" name="dname"> <input type="text" name="loc"> <input type="button" value="

  • Vue路由this.route.push跳转页面不刷新的解决方案

    Vue路由this.route.push跳转页面不刷新 一.背景 介绍:在vue项目开发中,使用路由进行页面跳转时,路由所跳转的页面不进行刷新. 也就是vue生命周期函数没有执行(created.mounted钩子函数). 案例: A页面: B页面: 问题: 当在A页面第一点击按钮到B页面时,一切正常,当返回到A页面再次点击按钮时,B页面没有执行mounted钩子函数,结果导致mounted函数中查询方法不执行. 二.解决方法: 1.使用activated:{}周期函数代替mounted:{}函

  • SpringBoot创建JSP登录页面功能实例代码

    添加JSP配置 1.pom.xml添加jsp解析引擎 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.s

  • 浅谈Vue页面级缓存解决方案feb-alive(上)

    feb-alive github地址 体验链接 使用理由 开发者无需因为动态路由或者普通路由的差异而将数据初始化逻辑写在不同的钩子里beforeRouteUpdate或者activated 开发者无需手动缓存页面状态,例如通过localStorage或者sessionStorage缓存当前页面的数据 feb-alive会帮你处理路由meta信息的存储与恢复 为什么开发feb-laive? 当我们通过Vue开发项目时候,是否会有以下场景需求? /a跳转到/b 后退到/a时候,希望从缓存中恢复页面

  • 浅谈Vue页面级缓存解决方案feb-alive (下)

    feb-alive github地址 体验链接 Vue页面级缓存解决方案feb-alive (上) 在剖析feb-alive实现之前,希望大家对以下基本知识有一定的了解. keep-alive实现原理 history api vue渲染原理 vue虚拟dom原理 feb-alive与keep-alive差异性 1. 针对activated钩子差异性 keep-alive配合vue-router在动态路由切换的情况下不会触发activated钩子,因为切换的时候组件没有变化,所以只能通过befor

  • Spring Security跳转页面失败问题解决

    这篇文章主要介绍了Spring Security跳转页面失败问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天新建SpringBoot项目练手,第一次添加了Spring Security.成功启动项目后发现与之前新建的项目有点不一样,无论我怎么设置系统首页,浏览器内打开的都是登陆界面,如图: 无论我怎么设置controller的跳转路径都不起作用,气到挠头!!! 经过查阅各种资料发现可能是Spring Security权限控制的原因,

  • Springboot实现自定义错误页面的方法(错误处理机制)

    一般我们在做项目的时候,错误机制是必备的常识,基本每个项目都会做错误处理,不可能项目一报错直接跳到原始报错页面,本篇博客主要针对springboot默认的处理机制,以及自定义错误页面处理进行讲解,需要的朋友们下面随着小编来一起学习学习吧! 默认效果示例 springboot他是有自己默认的处理机制的.在你刚创建一个springboot项目去访问一个没有的路径会发现他是会弹出来这样的信息. 而我们用postman直接接口访问,会发现他返回的不再是页面.默认响应一个json数据 这时候该有人在想,s

  • js跳转页面方法实现汇总

    复制代码 代码如下: <span id="tiao">3</span><a href="javascript:countDown"></a>布丁足迹;秒后自动跳转--<meta http-equiv=refresh content=3;url='/search/billsearch.jsp'</ul> <!--脚本开始--> <script language="javasc

  • js跳转页面方法总结

    js跳转页面方法大全<span id="tiao">3</span><a href="javascript:countDown"></a>祥子网屋;秒后自动跳转--<meta http-equiv=refresh content=3;url='/search/billsearch.jsp'</ul> <!--脚本开始--> <script language="javascr

  • vue-router跳转页面的方法

    使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生 官方文档请点击这里 ## vue-router 第一步当然是安装了,用npm安装命令 npm install vue-router --save-dev 第二步在.vue组件里添加标签,格式如下 <div id="app"> <p> <!-- 使用 router-link 组件来导航. --> <

随机推荐