繁体   English   中英

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

[英]How to call a Spring MVC controller in jsp

我想包含一个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}是空的

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

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

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

您可以使用JSP标记而不是JSP页面来定义页眉和页脚(至少我在应用程序中是这样做的)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM