我有两个带有两个控制器的 JSP 页面(每个 JSP 一个)。
- Landing.jspx 是一个搜索表单,它通过 POST 提交给登陆控制器。
- appt.jspx 是我的第二个页面,由 appt 控制器提供服务。
我正在尝试从登陆 jsp 转发到 appt jsp。我的着陆控制器标记如下:
@Controller
@SessionAttributes("state")
@RequestMapping(value = "/landing")
public class LandingController {
@RequestMapping(value = "/postData", method = RequestMethod.POST)
public String lookup(@ModelAttribute("state") State state, Model model) {
// something useful goes here
return "appt";
}
}
还有我的 ApptController:
从 Spring 调试日志信息中,我可以看出:
- 我的登陆控制器正在返回并呈现 appt.jspx
- 我在 InternalResourceView 'appt' 中看到“转发到资源 [/WEB-INF/jsp/appt.jspx]”
我在浏览器中没有看到新页面,也没有看到任何关于 Spring 尝试将 URL 与日志中的 appt 控制器方法匹配的信息。我必须假设 appt 控制器从未看到该请求。
这是我的 appt 控制器方法(Spring 正在执行):
@Controller
@SessionAttributes("state")
@RequestMapping(value="/appt")
public class ApptController {
@RequestMapping(method = RequestMethod.GET)
public String home(@ModelAttribute("state") PAWState state, Model model) {
model.addAttribute("state", state);
return "appt";
}
使用:
return "redirect:/appt"
这让我更接近,我看到:
- 我的登陆控制器正在返回并呈现 appt.jspx
- 我看到 DispatcherServlet 试图匹配 URL /appt 并在我的 appt 控制器中找到正确的方法。
- 我看到 appt 控制器方法返回 Spring 所说的视图“appt”渲染
我没有看到浏览器中的新渲染。我看到相同的搜索页面。
我错过了什么?
日志(返回“redirect:/appt”):
12:53:40,451 DEBUG - DispatcherServlet with name 'XServlet' processing POST request for /X/landing/postData]
12:53:40,451 DEBUG - Looking up handler method for path /landing/postData
12:53:40,451 DEBUG - Returning handler method [public java.lang.String x.x.x.x.controller.LandingController.lookup(x.x.x.x.controller.valuebeans.XState,org.springframework.ui.Model) throws x.x.x.x.common.exception.XException]
12:53:40,451 DEBUG - Returning cached instance of singleton bean 'LandingController'
12:53:40,732 DEBUG - Invoking afterPropertiesSet() on bean with name 'redirect:/appt'
12:53:40,732 DEBUG - Rendering view [org.springframework.web.servlet.view.RedirectView: name 'redirect:/appt'; URL [/appt]] in DispatcherServlet with name 'XServlet'
12:53:40,732 DEBUG - Successfully completed request
12:53:40,732 DEBUG - DispatcherServlet with name 'XServlet' processing GET request for [/X/appt]
12:53:40,732 DEBUG - Looking up handler method for path /appt
12:53:40,732 DEBUG - Returning handler method [public java.lang.String x.x.x.x.controller.ApptController.home(x.x.x.x.controller.valuebeans.XState,org.springframework.ui.Model) throws x.x.x.x.common.exception.XException]
12:53:40,732 DEBUG - Returning cached instance of singleton bean 'apptController'
12:53:40,732 DEBUG - Last-Modified value for [/X/appt] is: -1
12:53:40,732 DEBUG - Invoking afterPropertiesSet() on bean with name 'appt'
12:53:40,732 DEBUG - Rendering view [org.springframework.web.servlet.view.JstlView: name 'appt'; URL [/WEB-INF/jsp/appt.jspx]] in DispatcherServlet with name 'XServlet'
12:53:40,732 DEBUG - Added model object 'org.springframework.validation.BindingResult.state' of type [org.springframework.validation.BeanPropertyBindingResult] to request in view with name 'appt'
12:53:40,732 DEBUG - Added model object 'state' of type [x.x.x.x.controller.valuebeans.XState] to request in view with name 'appt'
12:53:40,732 DEBUG - Forwarding to resource [/WEB-INF/jsp/appt.jspx] in InternalResourceView 'appt'
12:53:42,979 DEBUG - No properties file found for [file:/C:/Work/x/WEB-INF/messageSource/content_en_US] - neither plain properties nor XML
12:53:42,979 DEBUG - No properties file found for [file:/C:/Work/x/WEB-INF/messageSource/content_en] - neither plain properties nor XML
12:53:42,979 DEBUG - Loading properties [content.properties]
12:53:43,010 DEBUG - No property editor [java.lang.BooleanEditor] found for type java.lang.Boolean according to 'Editor' suffix convention
12:53:43,026 DEBUG - Successfully completed request
编辑:这是通过 Spring 3.1.1 使用注释