1


可以说我正在尝试在 java 上制作一些 CMS 或简单的模板引擎。
我目前拥有的:

  • 三个类BlockModule并且Extension有一些区别。他们每个人都使用hibernate扩展public abstract class AbstractElement和映射到数据库;这种结构允许以后使用所有这些混乱,例如,用户友好的元素管理(在网站或其他地方)、验证版本和更新它们等。
  • public class ElementController,它的工作原理与 DAO 类似——它从数据库中检索有关已注册元素的数据并将其放入 HashMaps 中,从而允许从模板类访问它们。
  • /Database/Templates/{template_name} 等文件夹,最初将存储模板。每个模板都必须有index.jsp,等等——基本的“模板”。

    我想做的事:
    简单基本的模板引擎(reed: light)。目前,正如我所看到的,计划有几个 JSP 标记用于模板化,例如<template:includePanel panel="Left">or <template:pageTitle>。我只需要这些基础知识,正如我所见,使用 JSP 标记使模板比插入代码更具可读性(使用现有的模板引擎是可能的,但我仍然找不到合适的);
    有问题的部分:管理块或模块。虽然模块是一个大问题,并且可能会派生到“插件”系统,但块是基本元素,除了 JSP 中的业务逻辑之外没有业务逻辑。然后为每个人注册单独的“描述”类是一个糟糕的设计。
    目前,如上所述,所有块描述都存储在数据库中,用于处理块的设置,如面板,它所属的面板和面板中的顺序。因此,唯一的问题情况是自动注册块(即 jsp 页面)。
    我可以看到的变体:
  • 创建一些自定义标签,例如

    <template:block name="BlockName">
    ...
    </template:block>
    

    计划中,此标签将此块添加到模板,如果它已经注册或将其添加到数据库,它将从数据库中刷新它的设置。但这行不通,只要 JSP 页面在运行时编译,即使这样,也不会处理这个标签。在这种情况下,我需要在请求模板之前调用每个块的 JSP,这将从哈希(刷新)中获取块信息。优点:我可以在单个页面中定义几个独立的块,并将它们处理成带有标签正文的模板;不需要其他代码来注册/获取信息/包含块;

  • 强制创建块以使其扩展一些public class AutoRegisterJSP 指令page。块注册的所有代码都会放在构造函数中,但是在这种情况下我仍然需要单独调用每个块的页面(这种情况下尝试使用反射,但只要页面没有编译,就找不到)。除了每页一个块(jsp/jspf)之外,与之前的变体类似;
  • 强制用户为每个块或块组创建一些“注册者”类,然后仅从数据库中检索信息。优点:保证所有块都已注册,块页面中除了块的逻辑之外没有代码,注册器类可以派生于一些抽象的预定义类并在容器启动时自动调用;缺点:没有机会在不重新启动 web 应用程序的情况下添加或删除块(也许可以部署,但删除不会那么容易),即使这是单独的块,也需要创建这样的注册器,而不是某些系统的一部分/插入;
  • 保留所有块的需要分离的类,从类 Block 派生并通过Reflection库解析它们(现在完成)。缺点:很多“垃圾”类,只要它们的唯一功能是注册所有块。

    在寻找答案时,我对 和 之类的模板引擎进行了简短的了解VelocityFreeMarker但只要我能看到,它们就无法为我提供这样的“自动注册”。


    最后,问题是:
    什么方法(来自上面描述的或一些不同的)或模板引擎可以为这种机制提供“短而美”的用法(比如简单的 JSP 标记或其他东西)?或者在尝试和测试上述变体时我错过了什么?

  • 4

    0 回答 0