我通常使用 Struts2,但出于各种原因,我正在探索 Spring 的使用,最值得注意的是 rest 样式 url 功能的灵活性。我想我也会尝试利用作用域 bean 在控制器之间存放一些数据。这是一个相对较大的项目,我有几个不同的控制器来处理站点的不同方面。
我遇到的是我在我的控制器中声明了一个 @Component 和 @Autowiring 它,但是数据没有在会话 bean 的控制器之间持久化。
豆示例:
@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class EventBean implements Serializable {
private Event event;
...
}
控制器示例:
@Controller
public class EventController {
@Autowired
private EventBean event;
@ModelAttribute("event")
public EventBean getEvent() {
return event;
}
@RequestMapping(value = "/{url}", method = RequestMethod.GET)
public String getEvent(@PathVariable String url, ModelMap model) {
model.addAttribute("url", url);
try {
// EventEntity in the bean is set by the url from DB
event.setEvent(url);
} catch (SQLException ex) {
Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, null, ex);
}
return "public/index";
}
}
现在我的目标是,如果我在这个控制器中设置事件,如果在第二个控制器中我访问事件 bean 并且实体不为空,则无需再次访问数据库。
public void setEvent(String url) throws SQLException {
if (this.event == null) {
this.event = EventDAO.retrieveByURL(url);
}
}
虽然这不会发生。当我导航到第二个控制器时,bean 内的事件实体始终为空。
我只玩了 Spring 几天,所以我确定我错过了一些东西,只是不确定我错过了什么。任何想法将不胜感激。
编辑:
调用 JSP:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Home</title>
</head>
<body>
<h1>Event Name: ${event.name}</h1>
<h2>Event URL: ${url}</h2>
</body>
</html>