我有一个完全没有身体的自定义标签。我试图以编程方式替换空体,为简单起见,
[<c:out value="SUCCESS!"/>]
目标是看到使用标签的JSP显示“[SUCCESS!]”,但我看到的只是“[]”,如果我查看生成的源代码,我可以看到c:out语句写在括号之间的页面上,但不解释。
有没有通用的方法来实现这一目标?最终目标是使用其他自定义标记而不是“c:out”标记。标签/内容将来自数据库。 我尝试使用SimpleTagSupport和BodyTagSupport的不同技术,但没有一个是成功的。事实上,我不确定技术上是否可以这样做,因为那时候标签已经被解释了。但那么应该怎么做呢?
答案 0 :(得分:1)
服务器标记(如自定义标记或JSTL标记)在the JSP is translated into a servlet时转换为Java代码。例如,以下JSP代码:
<c:out value="FooBar" />
在servlet中被翻译成类似的东西:
....
OutTag outTag = (OutTag) tagHandlerPool.get(OutTag.class);
outTag.setPageContext(pageContext);
outTag.setParent(null);
outTag.setValue(new String("FooBar"));
int evalOut = outTag.doStartTag();
....
在自定义标记中,您可以调用其他Java类/方法,并可以将HTML代码(而不是JSP代码)写入响应。
[<c:out value="SUCCESS!"/>]
未被解释,因为在此级别它只是一个直接写入响应的字符串。