How to call a Spring MVC controller in jsp
我想以JSP页面为例
1 | <ui:include src="/WEB-INF/jsp/header.jsp" /> |
但是header.jsp有变量,我需要一个控制器来初始化这些变量,有没有一种方法可以调用一个控制器,并将控制器方法jsp包含在另一个jsp中?
为例;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <%@tag description="Overall Page template" pageEncoding="UTF-8"%> <%@attribute name="header" fragment="true"%> <%@attribute name="footer" fragment="true"%> <html> <body> //include my header controller <ui:include src="/WEB-INF/jsp/header.jsp" /> <jsp:doBody /> //include my footer controller </body> </html> |
标题JSP
1 2 | Header ${test} |
我的标题方法
但控制器未使用,
我认为,如果您从MVC视图调用MVC控制器,您的应用程序将打破常见的MVC原则。您的代码将很难调试,很难测试,也很难被其他人理解。
在一个控制器中为视图的所有部分(页面的主要部分、页眉和页脚)准备模型属性可能是一个更好的主意。传递给JSP视图的模型在包含的自定义JSP标记和JSP中可用。
您可以使用@modelattribute注释方法一次为几个控制器方法提供属性。
您可以使用JSP标记而不是JSP页面来定义您的页眉和页脚(至少在我的应用程序中是这样做的)。
其他答案已经解释了模型应该由控制器填充。…如果在所有页面中都需要相同的模型变量,例如在页眉或页脚中,常见的方法是在单个handlerInterceptor中丰富模型,而不是在每个控制器方法中。
首先,JSP不应该直接"调用"任何控制器。
其次,我看到您使用的是Spring框架,在Spring中,从任何控制器到JSP,只有一个模型对象被传递到JSP。因此,如果在头中需要初始化另一个模型,则必须将URL调用到控制器,而不是调用header.jsp。