可以说我正在尝试在 java 上制作一些 CMS 或简单的模板引擎。
我目前拥有的:
Block
,Module
并且Extension
有一些区别。他们每个人都使用hibernate扩展public abstract class AbstractElement
和映射到数据库;这种结构允许以后使用所有这些混乱,例如,用户友好的元素管理(在网站或其他地方)、验证版本和更新它们等。
public class ElementController
,它的工作原理与 DAO 类似——它从数据库中检索有关已注册元素的数据并将其放入 HashMaps 中,从而允许从模板类访问它们。
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 AutoRegister
JSP 指令page
。块注册的所有代码都会放在构造函数中,但是在这种情况下我仍然需要单独调用每个块的页面(这种情况下尝试使用反射,但只要页面没有编译,就找不到)。除了每页一个块(jsp/jspf)之外,与之前的变体类似;
Reflection
库解析它们(现在完成)。缺点:很多“垃圾”类,只要它们的唯一功能是注册所有块。在寻找答案时,我对 和 之类的模板引擎进行了简短的了解
Velocity
,FreeMarker
但只要我能看到,它们就无法为我提供这样的“自动注册”。
最后,问题是:
什么方法(来自上面描述的或一些不同的)或模板引擎可以为这种机制提供“短而美”的用法(比如简单的 JSP 标记或其他东西)?或者在尝试和测试上述变体时我错过了什么?