Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaweb的外部模板_Java_Spring_Model View Controller_Jsp_Templates - Fatal编程技术网

javaweb的外部模板

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> <

似乎JSP、Velocity、Freemarker等可以提供所谓的“内部模板”:我可以描述外部模板,然后定义内部部分。像这样(简化):

main.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>

所以我可以定义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。你的用例示例太简单了。甚至有些