我目前正在使用 Spring MVC 4 开发新的 Web 应用程序。
我有四个文件,名为:header.jsp、menu.jsp、default.jsp 和 footer.jsp,它们基本上是我的 web 应用程序的模板。
因此,我的 default.jsp 是应用程序中所有其他页面的默认模板,它基本上是这样的:
...
<jsp:include page="header.jsp" />
<jsp:include page="menu.jsp">
<body>
Contents goes here
</body>
<jsp:include page="footer.jsp">
...
Controller :
...
@RequestMapping("/")
public ModelAndView index() {
return new ModelAndView("default");
}
...
我想要完成的是创建一个可以处理 header.jsp 的 java 类,一个可以处理 menu.jsp 等的 java 类......因为它们将是动态页面并且它们的内容会改变。
我知道我可以在 JSP 中使用 java 代码,但那是我不想做的。 我想做的示例:
public class menu {
//this class handles menu.jsp
public List menuItems() {
ArrayList menuItems = new ArrayList();
menuItems.add("Home");
menuItems.add("Contact");
return menuItems;
}
}
在 menu.jsp 中:
<%@ codebehind="menu.java" %>
<ul>
<li> ${item[0]} </li> <!-- would output 'Home' -->
<li> ${item[1]} </li> <!-- would output 'Contact' -->
</ul>
这可能吗?
最佳答案
是的,这是可能的,您只需在 ModelAndView 上添加型号即可。
"menuItem" - will be name of your model.
"menu.menuItems()" - is your modelObject.
Controller
@RequestMapping("/")
public ModelAndView index() {
Menu menu = new Menu();
return new ModelAndView("default", "menuItems", menu.menuItems());
}
菜单
public class Menu {
//this class handles menu.jsp
public List menuItems() {
ArrayList menuItems = new ArrayList();
menuItems.add("Home");
menuItems.add("Contact");
return menuItems;
}
}
不要使用 scriptlet,而是使用 jstl .
<%@ codebehind="menu.java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<ul>
<c:forEach var="menu" value="${menuItem}">
<li><c:out value="${menu}"/></li>
</c:forEach>
</ul>
此外,我建议您使用Apache Tiles与 spring以获得更好的模板框架。
关于java - 在 java 类中处理 JSP (Spring MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517278/