无法使用jsp:useBean使用标记解析会话

时间:2012-12-04 19:26:15

标签: jsp session

我正在使用jsp标签清理一些旧代码。现在我创建了一个模板标签,它使用页脚标签和标头标签。我将页眉和页脚代码从index.jsp移到了适当的位置,我清理了除一个之外的所有错误:

]] Root cause of ServletException.
weblogic.servlet.jsp.CompilationException: Failed to compile JSP /home/index.jsp
index.jsp:197:2: session cannot be resolved
<jsp:useBean id="myPojo" scope="session" class="my.pojo.MyPojo"/>

 ^---------^

    at weblogic.servlet.jsp.JavelinxJSPStub.reportCompilationErrorIfNeccessary(JavelinxJSPStub.java:226)
    at weblogic.servlet.jsp.JavelinxJSPStub.compilePage(JavelinxJSPStub.java:162)
    at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:246)
    at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:191)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:235)
    Truncated. see log file for complete stacktrace

如果我将范围更改为请求(<jsp:useBean id="myPojo" scope="request" class="my.pojo.MyPojo"/>),一切正常。但是,改变不同bean的范围并不是现在可以做的事情。

在搜索此解决方案时,很多人都提到了这个错误 <%@ page session="false"%>位于页面上,但我的网页都没有。我检查了所有内容,然后尝试将session设置为true,但这也没有做任何事情。只是为了检查我的理智我删除了标签和事情再次工作,所以问题似乎与会话范围的bean和标签的组合有关。

我做了一些测试,如果我将<jsp:useBean id="myPojo" scope="session" class="my.pojo.MyPojo"/>index.jsp移到template.tag,它也能正常运行。

template.tag

<%-- template.tag -->
<%@ tag description="Base template" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html>
<html:html>
  <head>
    <!-- css includes -->
  </head>
  <body>
    <t:header renderTabs="${renderTabs}"/>
    <jsp:doBody/>
    <t:footer/>
    <!-- javascript includes -->
  </body>
</html:html>

header.tag

<%-- header.tag -->
<%@ tag description="Header" pageEncoding="UTF-8" %>
<%@ attribute name="renderTabs" required="true" type="java.lang.Boolean" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<div>

footer.tag

<%-- footer.tag -->
<%@ tag description="Footer" pageEncoding="UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<div>
  <!-- render contact information -->
</div>

的index.jsp

<%-- index.jsp -->
<%@ page contentType="text/html" errorPage="/common/errors/error.jsp"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:template>
  <jsp:body>
    <jsp:useBean id="myPojo" scope="session" class="my.pojo.MyPojo"/>
    <!-- other code -->
  </jsp:body>
</t:template>

1 个答案:

答案 0 :(得分:1)

我遇到过这种情况,scope="application"也会发生这种情况。

这似乎是Weblogic的错误/局限性(自12.2.1.3.0起存在)。至少对于我来说,这是不会发生的。