Java模板:自动注册jsp / jspf

时间:2012-11-23 13:27:52

标签: java jsp template-engine


让我们说我正在尝试在java上制作一些CMS或简单的模板引擎 我现在有什么:

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

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

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

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

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

    在搜索答案时,我对VelocityFreeMarker等模板引擎进行了简短介绍,但只要我能看到,他们就无法为我提供“自动注册”。 p>


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

  • 0 个答案:

    没有答案