【问题标题】:JSP including: templating with jsp's so repeated code is included on every pageJSP包括:用jsp的模板进行模板化,所以每个页面都包含重复的代码
【发布时间】:2012-11-04 00:34:00
【问题描述】:

我是 jsp 的新手,因此开始在每个页面上使用静态重复代码对我的项目进行编码。例如,在每个页面的 head 部分,我检查是否有当前用户登录,如果有,则我在 body 部分使用他们的名字,如果没有,我会重定向到登录页面。

所以在我的页面上我想要以下内容:

<%@ page language="java" 
         import="com.ptm.UserBean"
 %> 
<!DOCTYPE html>
<html lang="en">
<head>
<title> this is my title </title>
<jsp:include page="head-section.jsp" >
</head>
<body >
<jsp:include page="header.jsp" >
</body>
</html>

在 head-section.jsp 我有一些导入 jquery 和我的 css 表的 html,然后是一个 jsp 代码块,它依赖于上面索引页面上的 UserBean 导入,然后是一些 javascript

header.jsp 包含使用在 head-section.jsp 代码块中设置的 jsp 变量。

所以我的问题是,我包含的这些单独的 jsp 不能单独工作,但是当包含时应该与页面一起工作,这减少了我拥有的重复代码的数量。这是最好的方法吗?我听说过标签文件,但我不确定如何实现。

提前感谢您的帮助!

【问题讨论】:

    标签: jsp templates servlets web tags


    【解决方案1】:

    标签文件绝对是一个不错的选择,and they're quite easy to use。好处是您可以向它们发送参数以提高可重用性。

    这是基本步骤(来自教程):假设您将标签存储在 /WEB-INF/tags 中(作为 .tag 文件),您需要在 jsp 中包含以下行

    <%@ taglib tagdir="/WEB-INF/tags" prefix="h" %>
    

    标签文件(我们称之为response.tag)可能看起来像

    <%@ attribute name="name" required="true" %>
    <h2>Hello, ${name}!</h2> 
    

    这意味着它需要一个名为 name 的参数。之后,您将其称为

    <h:response name="world"/>
    

    这将扩展到

    <h2>Hello, world!</h2>
    

    在输出中。

    【讨论】:

    • 我相信这是要走的路,但是现在我将使用静态包含来快速,稍后我将通过您提供的教程谢谢
    • 另请参阅 Will Hartung 对 stackoverflow.com/questions/1296235/… 的广泛而出色的回答,了解如何快速开始使用标签
    • 是的,我看到了这个答案,第一次阅读时让我感到困惑,但我确定我只需要坐下来解决问题,为答案欢呼!
    【解决方案2】:

    你可以使用include指令:

    <jsp:include page="..." />
    

    对于静态资源,你应该使用:

    <%@ include file="filename" %>
    

    【讨论】:

      猜你喜欢
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2016-02-19
      • 2012-08-15
      相关资源
      最近更新 更多