访问请求范围的bean [英] Accessing request scoped bean

查看:44
本文介绍了访问请求范围的bean的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在jsp页面中声明了一个请求范围的bean,并试图访问另一个页面. 我可以使用scriptletEL访问另一页上的bean,但是如果使用jsp;getProperty,则会出现异常. 下面是两个页面的代码.

I declared a request scoped bean in a jsp page and tried to access it another page. I was able to access the bean on another page using scriptlet as well as EL , however it got an exception if used jsp;getProperty . Below is the code of both the pages.

PageScope.jsp(第一页):

PageScope.jsp(First Page) :

   <jsp:useBean id="taskBean" class="com.mybean.TaskBean" scope="request" />
    <jsp:setProperty name="taskBean" property="multiplier" value="55" />
    <jsp:setProperty name="taskBean" property="multiplicand" value="<%= dd %>" />

<%
        System.out.println("Forwarding request to other page.");
        RequestDispatcher dispatcher = request.getRequestDispatcher("RequestScope.jsp");
        dispatcher.forward(request, response);
%>

RequestScope.jsp(另一页):

RequestScope.jsp(Another Page):

     <%
            out.println("Accessing request scoped bean");
            TaskBean taskBean = (TaskBean) request.getAttribute("taskBean");
            out.println(taskBean.getMultiplier());
        %>

        ${taskBean.multiplier}

        <jsp:getProperty name="taskBean" property="multiplier" />
         //THE ABOVE LINE THROWS EXCEPTION.

是否可以使用jsp:getProperty访问bean.请让我知道我错了. 谢谢.

Is it possible to access bean using jsp:getProperty. Please let me know i am wrong. Thanks.

下面是堆栈跟踪.

org.apache.jasper.JasperException: file:/RequestScope.jsp(28,4) jsp:getProperty for bean with name 'taskBean'. Name was not previously introduced as per JSP.5.3
    org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1104)
    org.apache.jasper.compiler.Node$GetProperty.accept(Node.java:1126)
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
    org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2428)
    org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2434)
    org.apache.jasper.compiler.Node$Root.accept(Node.java:475)
    org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2376)
    org.apache.jasper.compiler.Generator.generate(Generator.java:3489)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:250)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jsp.PageScope_jsp._jspService(PageScope_jsp.java:109)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

推荐答案

Name was not previously introduced" indicates that you haven't told your JSP about this bean as of yet.

您需要添加

<jsp:useBean id="taskBean" class="com.mybean.TaskBean" scope="request" />

在使用jsp:getProperty

jsp:getProperty的名称"属性应与声明的bean的"id"属性匹配.

The "name" attribute of jsp:getProperty should match the "id" attribute of the declared bean.

然后访问

<jsp:getProperty name="taskBean" property="multiplier" />

使用Scriptlet时使用

With Scriptlet When you use

TaskBean taskBean = (TaskBean) request.getAttribute("taskBean");

检查您已经在JSP中添加了<%@page import="com.mybean.TaskBean"%>语句.

Check You have already added <%@page import="com.mybean.TaskBean"%> statemement in your JSP.

因此,当JSP页面像RequestScope_jsp.java那样被编译时.

So, When JSP page gets compiled like RequestScope_jsp.java.

首先,它具有您的bean的import语句 其次,_jspService方法具有requestresponse参数作为参数.

First, It has import statement for your bean Second, _jspService method has request and response parameters as argument.

_jspService(HttpServletRequest request, HttpServletResponse response)

因此,可以转发的JSP页面使用scriptlets访问它们. EL也会发生同样的事情.

Thus, you can forwarded JSP pages access them using scriptlets. The same things happens with EL.

Remember thumb rule

:使用jsp:getProperty访问bean属性时,需要添加<jsp:useBean>,用于定位和实例化bean类

: When you access bean property using jsp:getProperty, you require to add <jsp:useBean> which is used to locate and instantiate a bean class

这篇关于访问请求范围的bean的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆