让我们说我正在尝试在java上制作一些CMS或简单的模板引擎
我现在有什么:
Block
,Module
和Extension
,但有一些差异。他们中的每个人都扩展public abstract class AbstractElement
并用hibernate映射到数据库;这种结构允许稍后使用所有这些混乱,例如,用户友好的元素管理(在网站或其他),验证版本和更新它们等。
public class ElementController
,它的工作原理与DAO类似 - 它从数据库中检索有关已注册元素的数据并将其放入HashMaps中,允许从templater类访问它们。
index.jsp
,依此类推 - 基本“模板”。
<template:includePanel panel="Left">
或<template:pageTitle>
。我需要这样的基础知识,正如我所看到的,使用JSP标签使模板比插入代码更具可读性(使用现有模板引擎是可能的,但我仍然无法找到合适的);
<template:block name="BlockName">
...
</template:block>
计划好,此标记会将此块添加到模板,如果已经注册,则将从数据库刷新其设置或将其添加到数据库。但是这不起作用,只要JSP页面在运行时编译,即使这样,这个标签也不会被处理。在这种情况下,我需要在请求模板之前调用每个块的JSP,这将从哈希(刷新)获取块信息。 PROS:我可以在单页中定义几个独立的块,并将它们处理成带有标签正文的模板;注册/获取信息/包括块不需要其他代码;
public class AutoRegister
whith JSP指令page
。块的注册的所有代码都将放在构造函数中,但在这种情况下,我仍然需要单独调用每个块的页面(尝试使用这种情况下的反射,但只要页面没有编译,就找不到它)。与之前的变体类似,除了每页一个块(jsp / jspf);
Reflection
库解析它们(现在这样做)。 CONS:很多'垃圾'类,只要它们的功能只是注册所有块。Velocity
和FreeMarker
等模板引擎进行了简短介绍,但只要我能看到,他们就无法为我提供“自动注册”。 p>
最后,问题是:
什么方法(来自上面描述的或者一些不同的)或模板引擎可以提供这种机制,使用“短而美”的用法(比如简单的JSP标签或其他东西)?或者在尝试和测试以上变体时,我错过了什么?