javaweb的外部模板
似乎JSP、Velocity、Freemarker等可以提供所谓的“内部模板”:我可以描述外部模板,然后定义内部部分。像这样(简化): main.jsp:javaweb的外部模板,java,spring,model-view-controller,jsp,templates,Java,Spring,Model View Controller,Jsp,Templates,似乎JSP、Velocity、Freemarker等可以提供所谓的“内部模板”:我可以描述外部模板,然后定义内部部分。像这样(简化): main.jsp: <html> <body> <div class="container"> <%@ include file="menu.jsp"%> <%@ include file="content.jsp"%> </div> <
<html>
<body>
<div class="container">
<%@ include file="menu.jsp"%>
<%@ include file="content.jsp"%>
</div>
</body>
</html>
<template file="main_template.jsp">
<div>
... my content here
</div>
</template>
<html>
<body>
<div class="container">
<inner_content />
</div>
</body>
</html>
<template file="main_template.jsp">
<form> ... feedback form content here ... </form>
</template>
所以我可以定义menu.jsp和content.jsp,所有的工作都很好。但是在这里,外部块引用了内部。不太适合我
我正在寻找Java技术,它可以让我实现如下内容:
some_block.jsp:
<html>
<body>
<div class="container">
<%@ include file="menu.jsp"%>
<%@ include file="content.jsp"%>
</div>
</body>
</html>
<template file="main_template.jsp">
<div>
... my content here
</div>
</template>
<html>
<body>
<div class="container">
<inner_content />
</div>
</body>
</html>
<template file="main_template.jsp">
<form> ... feedback form content here ... </form>
</template>
... 我的内容在这里
main\u template.jsp:
<html>
<body>
<div class="container">
<%@ include file="menu.jsp"%>
<%@ include file="content.jsp"%>
</div>
</body>
</html>
<template file="main_template.jsp">
<div>
... my content here
</div>
</template>
<html>
<body>
<div class="container">
<inner_content />
</div>
</body>
</html>
<template file="main_template.jsp">
<form> ... feedback form content here ... </form>
</template>
即。反之亦然-内部块引用外部。有可能使用JSP吗?如果没有-我应该使用什么与SpringMVC
编辑:为什么对我来说更舒服:当控制器接收到请求时,它会检测应该呈现的视图。例如,我可以呈现反馈表:
feedback.jsp:
<html>
<body>
<div class="container">
<%@ include file="menu.jsp"%>
<%@ include file="content.jsp"%>
</div>
</body>
</html>
<template file="main_template.jsp">
<div>
... my content here
</div>
</template>
<html>
<body>
<div class="container">
<inner_content />
</div>
</body>
</html>
<template file="main_template.jsp">
<form> ... feedback form content here ... </form>
</template>
... 反馈表单内容在这里。。。
或产品页面product.jsp:
<template file="main_template.jsp">
<div> ... product page content here ... </div>
</template>
... 产品页面内容在这里。。。
并且不需要为每种页面描述页面结构,也不需要向外部模板传递任何参数来正确呈现内容。甚至不需要动态编译—所有页面都只是一组隐式的预编译servlet。我创建了一个您可能感兴趣的JSP标记库: 下面是我如何使用WebFrames标记库实现您的请求 请注意这与您的示例完全是一对一的关联,但与您的示例不同,WebFrames允许您创建无限的占位符,这样您就可以拥有动态标题、css包含、右频道内容、左导航等内容 feedback.jsp
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<form> ... feedback form content here ... </form>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<div> ... product page content here ... </div>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<html>
<body>
<div class="container">
<wf:render section="inner_content" />
</div>
</body>
</html>
<%@ page %>
<%@ taglib prefix="template" tagdir="/WEB-INF/tags/template" %>
<template:maintemplate>
<div>
... my content here
</div>
</template:maintemplate>
... 反馈表单内容在这里。。。
product.jsp
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<form> ... feedback form content here ... </form>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<div> ... product page content here ... </div>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<html>
<body>
<div class="container">
<wf:render section="inner_content" />
</div>
</body>
</html>
<%@ page %>
<%@ taglib prefix="template" tagdir="/WEB-INF/tags/template" %>
<template:maintemplate>
<div>
... my content here
</div>
</template:maintemplate>
... 产品页面内容在这里。。。
main_template.jsp
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<form> ... feedback form content here ... </form>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<div> ... product page content here ... </div>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<html>
<body>
<div class="container">
<wf:render section="inner_content" />
</div>
</body>
</html>
<%@ page %>
<%@ taglib prefix="template" tagdir="/WEB-INF/tags/template" %>
<template:maintemplate>
<div>
... my content here
</div>
</template:maintemplate>
官方WebFrames示例 以下是网站的完整示例集,展示了如何创建/填充多个占位符: 首先查看示例主页的源代码: main
WebFrames简单示例页面
此页面由以下子页面组成。单击下面的链接查看
组成每个子页面的jsp/html。
查看如何定义内容部分而不定义布局
如果查看布局('frame.jsp'),您会发现它不知道要显示什么内容,它只是为内容创建了占位符:
帧
标题
WebFrames示例标题
页脚
Copyleft(c)SampleFooter公司。
这种模式提供了一种更加灵活的解决方案,可以创建可重用且易于维护的组件
注释
这是基于David Geary的早期工作:
另外,如果您愿意(或考虑)使用非JSP解决方案,我将本着PHP Smarty模板引擎的精神编写一个基于Java的模板引擎
我还为这个引擎提供了一个“Frames”标记库,它还没有出现在GitHub上。我找到了两个解决方案——复杂的一个和非常简单可爱的一个: 第一个是SiteMesh: 第二个是Claudius Hauptmann的定制标签:
这两种方法都很好,所以我希望这能对其他人有所帮助。这是使用JSP标记文件直接实现的 首先创建模板标记: /WEB-INF/tags/template/maintemplate.tag
<%@ tag body-content="scriptless" %>
<html>
<body>
<div class="container">
<jsp:doBody/>
</div>
</body>
</html>
然后创建使用模板标记的JSP页面:
/some\u page.jsp
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<form> ... feedback form content here ... </form>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<wf:render file="main_template.jsp">
<wf:section name="inner_content">
<div> ... product page content here ... </div>
</wf:section>
</wf:render>
<%@ page language="java" %>
<%@ taglib prefix="wf" uri="/WEB-INF/tld/webframes.tld" %>
<html>
<body>
<div class="container">
<wf:render section="inner_content" />
</div>
</body>
</html>
<%@ page %>
<%@ taglib prefix="template" tagdir="/WEB-INF/tags/template" %>
<template:maintemplate>
<div>
... my content here
</div>
</template:maintemplate>
... 我的内容在这里
JSP页面使用maintemplate.tag并向其传递一块正文内容。maintemplate.tag选择在何处呈现正文内容。我在显示从内到外概念的链接中找不到任何示例。你能说得更准确些吗?我已经更新了我的帖子,上面有所有的例子和一些解释。关于您的原始帖子:您的
some_block.jsp
无法很好地扩展,因为您在主版面中必然需要多个动态内容(即标题、页眉、页脚、主内容、元数据等)。我的JSP库允许您在布局中创建占位符,然后根据目标模板(在我的例子中是simpleexmaple.JSP)动态填充占位符。谢谢您,David,我感谢您的帮助。但这不是我想要的。我在回答中添加了一条评论,以更准确地解释我想要什么。大卫,在第二次更新后,你的答案对我来说更清楚了。我一定会试试你的taglib。你的用例示例太简单了。甚至有些