我有一个带有 Java 类(扩展 TagSupport)的自定义 JSP 标记库,它为我的 Web 应用程序生成输出。它有一些参数,这些参数使用StringBuilder
.
现在生成的 HTML 变得越来越复杂,并且很难通过调用来处理StringBuilder.append
,所以我想将代码生成替换为Freemarker template
.
我已经发现我可以使用通用component
的 Struts 标签,因为 Struts 标签已经使用 Freemarker 模板文件,所以我可以编写如下标签:
<s:component template="/components/myStruct.ftl">
<s:param name="myParam" value="%{'myParam'}" />
</s:component>
然后编写指定的模板文件myStruct.ftl
可能会解决我的问题。如果 Struts 真的找到并正确使用该文件,我实际上并没有尝试,但我乐观地希望它能够工作。
我的问题是,是否也可以使用自定义标签保留当前代码
<my:struct param="myParam" />
并且只更改链接到该标记的 Java 类。
我找到了读取 Freemarker 模板的代码:
Configuration config = FreemarkerManager.getInstance().getConfiguration(pageContext.getServletContext());
config.setServletContextForTemplateLoading(pageContext.getServletContext(), "/components");
Template templ = config.getTemplate("myStruct.ftl");
templ.process(params, pageContext.getOut());
但这对我来说似乎很迂回,我想知道这样做的“标准”方式是什么。此外,您似乎不能在这样使用的模板中使用 Struts 标签库中的标签。(我遇到了一个ArrayIndexOutOfBoundException
,由Sitemesh
...引起的,我还没有分析它。)
我的意图是保持 Java 类作为 Struts 组件标记的某种包装器。也许是这样的:
OgnlValueStack stack = TagUtils.getStack(pageContext);
Component c = new Component(stack);
c.addParameter("param", param);
但我不知道如何继续这个代码存根。反正可能是废话。
是否有一种简单/“标准”的方法可以做到这一点,还是我只需要摆脱自定义标签?
提前致谢。