Контроллеры Spring 3 - поддержание модели в потоке - PullRequest
0 голосов
/ 10 июня 2010

Я уверен, что есть какой-то способ сделать то, что я хотел бы здесь, но я не смог найти его в документации

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value = "/test")
public class TestController {

    @RequestMapping(value = "/one")
    public String one(Model m) {
        System.out.println("one: m = " + m);
        m.addAttribute("one", "valueone");
        return "redirect:two";
    }

    @RequestMapping(value = "/two")
    public String two(Model m) {
        System.out.println("two: m = " + m);
        return "redirect:three";
    }

    @RequestMapping(value = "/three")
    public String three(Model m) {
        System.out.println("three: m = " + m);
        return "redirect:one/two/three";
    }

    @RequestMapping(value = "/one/two/three")
    public String dest(Model m) {
        System.out.println("one/two/three: m = " + m);
        return "test";
    }
}

Что я мог бы ожидать, так это увидеть, что атрибут модели "one" со значением "valueone" должен присутствовать в вызовах метода two (), three () и dest (), однако он довольно заметен отсутствие. Как бы я сделал эту работу, как ожидалось?

1 Ответ

2 голосов
/ 10 июня 2010

Вам необходимо использовать аннотацию @SessionAttributes на контроллере, а затем использовать SessionStatus, чтобы сообщить платформе, когда вы закончите с атрибутом.

@Controller
@RequestMapping(value = "/test")
@SessionAttributes("one")
public class TestController {
    // ...

    @RequestMapping(value = "/one/two/three")
    public String dest(Model m, SessionStatus status) {
        System.out.println("one/two/three: m = " + m);
        status.setComplete();
        return "test";
    }
}

См. http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/SessionAttributes.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...