我想知道如何在评估之前将一些JSP片段插入BodyContent?我尝试过不同的方法,但都没有。我一定是做错了。
例如,我希望有人将我的标签用作:
<mytag:html>
<mytag:head>
<link href="test.css"></link>
</mytag:head>
然后它可以在头部后面插入一个jsp片段(从配置文件中读取):
<link href="<%=request.getAttribute("theme")%>/test.css"/>
它最终会输出:
<html>
<head>
<link href="target-theme/test.css"></link>
<link href="test.css"></link>
</head>
这是我想要做的:
我想通过使用<myTag:*/>
我不想在MyTag.Java中对某些HTML输出进行硬编码。这就是为什么我想从外部文件读取一些JSP片段并在运行时注入它。
有关如何使用TagSupport实现此目的的任何示例/代码段吗?
答案 0 :(得分:1)
JSP文件是transformed to servlets,此时还会生成JSP标记的调用代码。基本上是servlet容器instantiates your tags,有时使用标记实例池,但这两种实例都不会被容器直接暴露。
在标记处理程序中,没有JSP代码的概念。标签处理程序“更接近金属”(可以这么说),在这里你只能直接写入响应。您无法评估JSP代码。此时已对身体内容进行了评估。
因此,您无法将JSP片段注入标记处理程序,但您可以让标记处理程序自己从该外部文件中提取内容。但它将是静态内容!
<%=request.getAttribute("theme")%>
之类的东西在这里没有任何意义,将直接发送给客户端(按原样)。你可以在那里使用某种类型的JSP代码,如果你将自己限制在${theme}
之类的{{1}}这样的EL表达式,但是这会变得非常复杂,因为你的外部代码会变得更加复杂。 / p>
根据你想要做什么,或者你的servlet容器实现了什么规范,另一个解决方案可能是使用evaluate yourself,所以看看这是否有助于你的情况(如果{{那会很好3}}可以由开发人员构建,但不幸的是,这是容器实现。)
但是你正在做的事情听起来像the JSP 2.0 tag files其他JSP代码的输出。如果您想简化开发并稍后在其输出之上添加内容,那么还要结帐JSPFragment。它是一个网页布局和装饰框架,可以做你想要实现的目标(甚至更多)。