Spring MVC: RedirectAttributes, chuyển tiếp trang với tham số trong Spring MVC

Spring MVC – Phần 5: RedirectAttributes, chuyển tiếp trang với tham số trong Spring MVC.

Ở bài trước chúng ta đã tìm hiểu cách sử dụng nhiều controller để xử lý 1 request. Vậy làm thế nào để truyền dữ liệu giữa các controller đó?

RedirectAttributes

RedirectAttributes được dùng để truyền các giá trị, tham số giữa các controller khi thực hiện redirect:

Ví dụ: Từ page1 ta gửi tham số name tới method redirect(), bên trong method redirect() sẽ sử dụng RedirectAttributes để chuyển lại tham số name đó tới method page2() xử lý.

package stackjava.com.springmvchello.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;

@Controller
public class BaseController {

  @RequestMapping("/")
  public String page1() {
    return "page1";
  }

  @RequestMapping("/redirect")
  public RedirectView redirect(@RequestParam("name") String name, RedirectAttributes redirectAttributes) {
    System.out.println(name);
    redirectAttributes.addAttribute("name", name);
    return new RedirectView("page2");
  }

  @RequestMapping("/page2")
  public String page2(@RequestParam("name") String name, Model model) {
    model.addAttribute("name", name.toUpperCase());
    return "page2";
  }

}

 

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<head>
<title>Spring MVC Redirect</title>
</head>

<body>
  <h2>Page1</h2>
  <form:form method="GET" action="redirect">
    Name: <input type="text" name="name"><br/>
    <input type="submit" value="Redirect" />
  </form:form>
</body>
</html>
<html>
<head>
<title>Spring MVC Redirect</title>
</head>
<body>
  <h2>Page2</h2>
  Hello ${name}
</body>
</html>

Spring MVC - Phần 4: RedirectAttributes, chuyển tiếp trang với tham số trong Spring MVC

 

Spring MVC - Phần 4: RedirectAttributes, chuyển tiếp trang với tham số trong Spring

Download code ví dụ trên tại đây

References:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/support/RedirectAttributes.html

 

Spring MVC – Phần 4: RedirectAttributes, chuyển tiếp trang với tham số trong Spring MVC

6 thoughts on “Spring MVC: RedirectAttributes, chuyển tiếp trang với tham số trong Spring MVC

  • giờ e muốn vào trang web thì nó loát danh sách bài hát bằng json luôn. thì e dùng redirectAttribute này dùng thế nào ạ. hay có cách nào hay hơn không a. cảm ơn a

  • Bị lỗi bạn ơi mình làm y chang

    HTTP Status 500 – Internal Server Error

    Type Exception Report

    Message Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.view.RedirectView com.java.ABC.redirect(java.lang.String,org.springframework.web.servlet.mvc.support.RedirectAttributes)]; nested exception is java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument.

    Description The server encountered an unexpected condition that prevented it from fulfilling the request.

    Exception
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.view.RedirectView com.java.ABC.redirect(java.lang.String,org.springframework.web.servlet.mvc.support.RedirectAttributes)]; nested exception is java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument.
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Root Cause
    org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.view.RedirectView com.java.ABC.redirect(java.lang.String,org.springframework.web.servlet.mvc.support.RedirectAttributes)]; nested exception is java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument.
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:181)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Root Cause
    java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument.
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:322)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Note The full stack trace of the root cause is available in the server logs.

    Apache Tomcat/8.5.16

    • ‘Argument [RedirectAttributes] is of type Model or Map but is not assignable from ‘
      Bạn redirect với model hoặc map thì trước khi vào page1 bạn phải add model/map đó vào request trước nhé

      Sau đấy từ page1 redirect nó sẽ redirect model/map đó.
      Ở đây mình chỉ redirect 1 string nên ko cần.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

DMCA.com Protection Status stackjava.com