【问题标题】:How can I reuse HTML/JSP within a page?如何在页面中重用 HTML/JSP?
【发布时间】:2011-01-01 22:22:54
【问题描述】:

我是 JSP 的新手,我正在尝试减少大量剪切和粘贴的代码。
在项目的每个页面上,大约有 25 行混合的 JSP、Struts 标签、JSTL 标签和 HTML,它们在页面的各个点被剪切和粘贴。这大约 25 行重复使用的代码在页面之间甚至不相似(大约有 250 个页面),但在每个页面中完全相同。最终,这个(业务逻辑)代码应该从视图中移出,但是这样做会是一个比我目前计划允许的更大的项目,所以我想知道是否有一种简单的方法来重用混合标签+JSP在页面内,作为临时修复,以便在时间允许的情况下分阶段重构代码。

为了清楚起见,我正在寻找一种方法来在不创建新文件的情况下封装代码(/本地到页面范围) - 即它应该在调用它的同一页面中定义。

有些人建议这可以用 Tiles 来完成 - 如果是这样,请告诉我怎么做。

【问题讨论】:

    标签: jsp code-reuse


    【解决方案1】:

    您可以创建一个包含文件并 jsp:include 它在任何需要的地方。可变部分可以使用 jsp 条件、jstl EL 属性或 struts EL 来完成。

    我不一定要重新编码现有页面,因为它们已经在工作了。

    【讨论】:

    • 感谢您的建议。我以前曾使用这种方法作为临时修复,但遗憾的是,在这种情况下,它要么会显着增加项目中 jsp 页面的数量,要么会造成混乱的条件。问题是这些页面并没有真正工作——我的任务是使站点跨浏览器兼容。我试图通过减少复制粘贴的代码来减少调试时间,同时只重写现在需要重写的内容。
    【解决方案2】:

    看看Apache tiles。由于您正在使用 Struts,我很惊讶您还没有找到它。它基本上是一个模板引擎,我认为符合您的要求。

    已经建议的<jsp:include> 可以与<jsp:param> 一起使用以传递变量。喜欢

    <jsp:include file="includedFile.jsp">
        <jsp:param name="username" value="jsmith" />
    </jsp:include>
    

    实际上,如果只想在公共代码中包含 1 个文件,我会推荐 &lt;jsp:include&gt; 的简单性,而不是 Tiles 的强大功能。

    【讨论】:

    • 实际上我几周前才开始使用磁贴来清理一些代码,尽管我并不像我应该熟悉的那样熟悉它。是否可以创建一个图块并将其插入到同一个文件中?由于文件之间的代码在结构或逻辑上并不真正相似,因此我希望不需要为封装创建单独的文件,因此我可以分阶段重构。
    【解决方案3】:

    Struts Tiles 最适合在 Struts 中用于模板化特定页面,这样所有页面共有的部分就不需要每次都编码。 参考http://struts.apache.org/1.x/struts-tiles/

    更简单的 JSP 方法是上面讨论的 jsp:include。

    仅供参考,还有第三种方法,即包含指令的方法

    jsp:include和include指令的区别如下

    只有在以下情况下才应该使用包含指令() 1) 如果文件包含静态文本 2)如果文件很少改变(如果修改了这种类型的包含文件,JSP引擎可能不会重新编译JSP) 3) 如果你有一个通用代码 sn-p 可以跨多个页面重用(例如页眉和页脚)

    只有在以下情况下才应该使用 jsp:include 1)包含的JSP的内容是动态的,可以在运行时改变 2)选择在运行时渲染哪些内容(因为page和src属性可以采用运行时表达式)

    我希望这能帮助你做出决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2011-06-25
      相关资源
      最近更新 更多