0

我在 Spring 上配置了一个控制器,我必须通过它锻炼一个数据库连接来调用 DAO 操作。

这个连接实际上在一个会话变量中可用,由于它不是 HttpServlet 继承的,因此 Spring Controller 目前无法访问该变量。

这个控制器访问会话变量的正确方法是什么?为了操作请求对象,我必须实现从 HttpServlet 继承的方法 doGet 和 doPost 吗?它可以让 Spring 控制类吗?

感谢您的回复。

@Controller
public class SpringController {

    @RequestMapping("/create")
    public String form(MyCar myCar) {
                /*That's where I have to retrieve hibernateSession from
                * HttpSession and pass to DAO class do its work.
                */
                MyCarDAO myCarDao = new MyCarDAO(session);
                myCarDao.saveOrUpdate(myCar);
        return "WEB-INF/views/projeto/novo.jsp";
    }
}
4

3 回答 3

0

假设您声明了 3 个会话属性,但在处理程序方法参数中只使用了其中的 1 个,因此:

@SessionAttributes({ "abc", "def", "ghi" })
public class BindingTestController {

    @ModelAttribute("abc")
    public String createABC() {
        return "abc";
    }

    @RequestMapping(method = RequestMethod.GET)
    public void onGet(@ModelAttribute("abc") String something) {
        // do nothing :)
    }

    @RequestMapping(method = RequestMethod.POST)
    public void onPost(@ModelAttribute("abc") String something, BindingResult bindingResult, SessionStatus sessionStatus) {
        sessionStatus.setComplete();
    }

}

如果在谷歌中点击它有很多例子

于 2013-07-29T18:43:32.653 回答
0

您可以HttpSession在方法中添加参数:

@RequestMapping("/create")
public String form(MyCar myCar, HttpSession session) {
   ...
}

Spring会在调用方法时自动添加session参数。

检查RequestMapping的文档以获取可能的参数

于 2013-07-29T18:43:54.490 回答
0

IMO正确的方法应该是将连接存储在会话范围的bean而不是会话变量中。

使用@Scope(value = "session")

(参见http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html

于 2013-07-29T18:49:28.590 回答