我希望我的標記檔案在其正文中支持完整的 JSP 代碼。
例如,我想撰寫一個標簽檔案,將其內容包裝在一個 div 中:
對話標簽
<%@tag pageEncoding="UTF-8" body-content="scriptless" %>
<div class="dialog">
<jsp:doBody />
</div>
然后我想像這樣使用它:
使用-dialog.tag
<%@tag pageEncoding="UTF-8" %>
<%@attribute name="someAttribute" type="java.lang.String" required="false" %>
<%@taglib prefix="mytaglib" uri="/WEB-INF/tlds/mytaglib" %>
<mytaglib:dialog>
<%-- use variable in body content --%>
Hello <%= someAttribute %>
<%-- use other tags in body content --%>
<mytaglib:some-other-tag someParameter="5" />
</mytaglib:dialog>
但是,在這種情況下不允許使用Scriptlet ( <% ... %>) 和 Scriptlet 運算式 ( )。( , , )<%= ... %>的其他可用值也不起作用。錯誤資訊是:body-contentemptyscriptlesstagdependent
Scripting elements ( <%!, <jsp:declaration, <%=, <jsp:expression, <%, <jsp:scriptlet ) are disallowed here.
因此,無法以這種方式撰寫/嵌套標簽檔案。我認為這是 JSP 標記檔案的一個巨大限制。
相反,在其他框架中,您可以隨意組合和嵌套組件(例如reactjs)。
但是,通過使用實作 的 Java 類,BodyTag完全可以評估標簽的正文內容:
public class Dialog implements BodyTag
{
private PageContext pageContext;
@Override
public void setPageContext(PageContext pageContext)
{
this.pageContext = pageContext;
}
@Override
public int doStartTag()
{
try
{
JspWriter out = pageContext.getOut();
out.print("<div class=\"dialog\">");
}
catch (Exception e) { /* Handle exception*/ }
// Evaluate body content of this tag
return EVAL_BODY_INCLUDE;
}
@Override
public int doEndTag()
{
try
{
JspWriter out = pageContext.getOut();
out.print("</div");
}
catch (Exception e) { /* Handle exception*/ }
// Continue evaluating the rest of the JSP page
return EVAL_PAGE;
}
/* implement other methods of the interface ... */
}
Dialog.javaJava 類可以作業,而該檔案dialog.tag不允許在其主體中包含完整的 JSP 運算式。因此我的問題是:
有沒有辦法讓一個標記檔案評估其具有完整 JSP 代碼支持的主體,就像EVAL_BODY_INCLUDE在 Java 檔案中實作 BodyTag 一樣?
uj5u.com熱心網友回復:
來自oreilly.com:
您不能在標記檔案標記的正文中使用腳本代碼
因此,創建允許所有 JSP 運算式(包括嵌套組件)的標記的唯一方法是使用實??現 BodyTag 的 Java 檔案。
這是 JSP 標記檔案的一個顯著限制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/526911.html
標籤:爪哇jsp
上一篇:MVC表單資料無法系結到模型
下一篇:快速應用程式開發
