我为JSP页面创建了一个方便的标记库。它看起来像这样:
<myTag:getContent>
<div id="metadata">
<myTag:printContent arg="meta"/>
</div>
<div id="data">
<myTag:printContent arg="data"/>
</div>
</myTag>
getContent包含一个RESTful Web服务,它初始化并设置一些变量,这样当我使用printContent及其各自的参数时,它只需打印变量而不是重新获取内容。
问题在于,在实际应用中,对打印内容的调用深入到不同的页面剪辑中:
<myTag:getContent>
<jsp:include page=".../.../.../this.jsp"/>
<jsp:include page=".../.../.../that.jsp"/>
</myTag>
我在每个页面的顶部定义了myTag库,但我得到了:
java.lang.NullPointerException
在&#34; myTag:printContent&#34;的内部JSP中
我该怎么办?考虑到真正的内部jsp页面还有其他标记库和逻辑,这是否可能?
getContent是.tld(标记库描述符)
中的以下属性<body-content>JSP</body-content>
答案 0 :(得分:0)
好吧,看起来好老一步,看起来问题在这里是真的。我切换了jsp:includes到指令包含。对于那些不熟悉的人:
<myTag:getContent>
<%@include file=".../.../.../this.jsp"%>
<@%include file=".../.../.../that.jsp"%>
</myTag>
这是有效的,因为现在范围是相关的,因为此处的包含在翻译时是静态的,而jsp:include在请求时是动态的。