如何在jsp中调用Spring MVC控制器

时间:2013-12-24 06:39:56

标签: java spring jsp spring-mvc

我想包含一个例子的jsp页面

<ui:include src="/WEB-INF/jsp/header.jsp" />

但我的header.jsp有变量,我需要一个控制器来初始化这些变量,有没有办法调用控制器并将控制器方法jsp包含在另一个jsp中?

例如;

<%@tag description="Overall Page template" pageEncoding="UTF-8"%>
<%@attribute name="header" fragment="true"%>
<%@attribute name="footer" fragment="true"%>
<html>
<body>
    <div id="pageheader">
        //include my header controller
        <ui:include src="/WEB-INF/jsp/header.jsp" />
    </div>
    <div id="body">
        <jsp:doBody />
    </div>
    <div id="pagefooter">
        //include my footer controller
    </div>
</body>
</html>

header.jsp中

Header
${test}

我的标题方法

public String header(Map<String, Object> model){
    model.put("test", "test");
    return "header";
}

但未使用控制器且${test}为空

3 个答案:

答案 0 :(得分:2)

我认为,如果从MVC视图调用MVC控制器,您的应用程序将制定常见的MVC原则。您的代码将难以调试,难以测试且难以被其他人理解。

在一个控制器中为视图的所有部分(页面的主要部分,页眉和页脚)准备模型属性可能更好。您传递给JSP视图的模型在包含的自定义JSP标记和JSP中可用。

您可以使用@ModelAttribute带注释的方法一次为几个控制器方法提供属性。

您可以使用JSP tags而不是JSP页面来定义页眉和页脚(至少我在应用程序中的操作方式)。

答案 1 :(得分:0)

首先,您的JSP不应该直接“调用”任何控制器。

其次,我看到你正在使用Spring框架,而在Spring中,从任何控制器到JSP,只有一个模型对象被传递给JSP。因此,如果在标题中需要初始化另一个模型,则必须调用控制器的URL而不是调用header.jsp。

答案 2 :(得分:0)

其他答案已经解释过该模型应该由控制器填充。 ...如果您需要在所有页面中使用相同的模型变量,例如在页眉或页脚中,通常的方法是在单个HandlerInterceptor中丰富模型,而不是每个控制器方法。