我正在尝试从自定义标记向我的JSP编写Struts2标记。我有下面的代码。这实际上是否可行,或者是否有关于JSP生命周期的事情使得这不可能?如果不可能,还有另一种方法可以做我想做的事吗?
while (iterator.hasNext()) {
Bulletin bulletin = (Bulletin) iterator.next();
if (bulletin.isApproved()) {
out.println("<s:url value=\"GetSingleBulletin\">");
out.println("<s:param name=\"id\" "
+ "value=\"%{" + bulletin.getId()+ "}\" />");
out.println(bulletin.getName() + " -- " + bulletin.getSubject()
+ " " + bulletin.getDate());
out.println("</s:url>");
out.println("<br><br>");
}
}
答案 0 :(得分:0)
标记作为将JSP转换为servlet的“转换阶段”的一部分进行解析。通过在标签中发出其他标签,您将假设“第二次通过”翻译,但这种情况不会发生。所以从根本上说这是一个坏主意。
相反,我建议只发出等效的HTML(实际上只是带参数的URL,给出上面的代码)。假设您的问题并不比上面描述的复杂,这似乎是最简单的方法。事实上,即使你可以发出标签,我也没有看到一个非常有说服力的案例,为什么标签会比原始HTML更好。 JSP taglibs应该在可能的情况下促进自动化和更少的代码;更少的代码减少了错误并使JSP更易于维护。但是你的上述案例并不是一个尖叫着“必须使用标签”的案例。
或者,如果你真的更喜欢使用上面自定义标记中的标记,或者你愿意完全删除你的taglib,你可以在scriptlet中编写上面的Java代码并散布你对另一个的使用struts标记在该scriptlet代码之间。所以,像:
<%
while (iterator.hasNext()) {
Bulletin bulletin = (Bulletin) iterator.next();
if (bulletin.isApproved()) {
%>
<s:url value="GetSingleBulletin">
etc.
<%
}
}
%>
答案 1 :(得分:0)
不可能只允许在html tag.fa
中使用out.println