问题描述

今天在开发中遇到一奇怪问题,有一个action,在该action里使用request.setAttribute()方法将一个List类型对象放在request中,然后forward到一个jsp文件,该文件的主要内容是使用<logic:iterate>标签将这个List对象中的条目列表显示。与它同样逻辑但位于另一模块(teacher)中的代码执行正常。但这个模块(xxgl)中的代码,本来很简单的逻辑,却总是提示:

org.apache.jasper.JasperException: Cannot find bean t in any scope 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:432) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:356) 
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069) 
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455) 
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) 
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) 
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) 
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) 
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171) 
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172) 
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) 
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) 
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:193) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549) 
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:589) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666) 
at java.lang.Thread.run(Unknown Source) 

将<logic:iterate>之间的代码去掉后就不会提示错误了,所以怀疑是<bean:write>中的代码有错误。相关文件ListSfzxJbxxAction.java中的execute方法如下:

public ActionForward execute( 
   ActionMapping mapping, 
   ActionForm form, 
   HttpServletRequest request, 
   HttpServletResponse response) 
   throws Exception { 

   HibernateDAO dao = HibernateDAO.getInstance(getServlet().getServletContext()); 
   List sfzxjbxxs = dao.find("from " + SfzxJbxx.class.getName()); 
   SfzxJbxx tmp = new SfzxJbxx(); 
   tmp.setSfzxid("id"); 
   tmp.setXxdm("pku"); 
   sfzxjbxxs.add(tmp); 
   request.setAttribute("sfzxjbxxs", sfzxjbxxs); 
   return mapping.findForward("success"); 

listsfzxjbxx.jsp内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> 
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> 
<head> 
      <title>SfzxJbxxList</title> 
</head> 
<body> 
<logic:iterate  name="sfzxjbxxs" id="sfzxjbxx"> 
  <tr> 
    <td align="left"> 
      <bean:write name="sfzxjbxx" property="sfzxId" filter="true"/> 
    </td> 
    <td align="left"> 
      <bean:write name="sfzxjbxx" property="xxdm" filter="true"/> 
    </td> 
    <td> 
    </td> 
  </tr> 
</logic:iterate> 
<body> 
</html> 

模块配置文件中相关内容如下:

<action-mappings> 
    <action 
        attribute="Form" 
        input="/form/sfzxjbxx.jsp" 
        name="sfzxJbxxForm" 
        path="/saveSfzxJbxx" 
        type="edu.pku.cc.sfzx.xxgl.action.SaveSfzxJbxxAction" /> 
    <action    path="/listsfzxjbxx" type="edu.pku.cc.sfzx.xxgl.action.ListSfzxJbxxAction"> 
        <forward name="success"              path="/form/listsfzxjbxx.jsp"/> 
    </action> 
          
</action-mappings> 

问题解决

经过三个小时的检查,发现是listsfzxjbxx.jsp里缺少<logic:iterate>标签的声明,在前面增加上:

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> 

一切OK!

[Struts]Cannot find bean in any scope之一解相关推荐

  1. Error:Cannot find bean: org.apache.struts.taglib.html.BEAN in any scope

    原因:html标签和struts标签混用,或者表单元素外面没有<html:form>标签包裹. 解决:统一标签 <html:form action="/login.do&q ...

  2. Bean的作用域scope

    Bean的作用域scope 1.singleton 单例,指一个bean容器中只存在一份 2.prototype 每次请求(每次使用)创建新的实例,destroy方式不生效 3.request 每次h ...

  3. Spring中bean的scope详解

    如何使用spring的作用域: <bean id="role" class="spring.chapter2.maryGame.Role" scope=& ...

  4. Spring bean - scope详解

    ​ Scope是定义Spring如何创建bean的实例的. 在创建bean的时候可以带上scope属性,scope有下面几种类型. Singleton 这也是Spring默认的scope,表示Spri ...

  5. spring之bean的作用域scope的值的详解

    今天研究了一下scope的作用域.默认是单例模式,即 scope="singleton".另外scope还有prototype.request.session.global ses ...

  6. Spring配置文件中bean标签的scope属性

    转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton  (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...

  7. java中bean的作用域有哪些_Spring中Bean的5种作用域scope详解

    Spring Bean简介: 在spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean. 简单地讲,bean就是由Spring容器初始化 ...

  8. spring学习之将类交给spring管理,bean的注入,scope,集合注入,自动装配,生命周期,迟加载

    一.将类交给spring管理(IOC) 1.将类交给spring容器管理 如何将一个类交给spring容器进行管理呢? 方法很简单,只需要在applicationContext.xml中加入对应的xm ...

  9. 高级Spring之Scope 详解

    在当前版本的 Spring 和 Spring Boot 程序中,支持五种 Scope singleton,容器启动时创建(未设置延迟),容器关闭时销毁 prototype,每次使用时创建,不会自动销毁 ...

最新文章

  1. Docker容器制作
  2. socket绑定INADDR_ANY
  3. 1019. 数字黑洞 (20)
  4. CoreJava学习3——​基本类型的包装类
  5. 【CSS3】填色表格演示hsl()
  6. 移通好闹钟微信小程序全套源码
  7. Linux修改文件句柄数与vm.max_map_count参数
  8. [转] linux 下查看一个进程运行路径的方法
  9. 英特尔第十代处理器为什么不支持win7_Intel最新CPU和主板不能装Win7怎么办
  10. 翁凯java进阶_翁凯-----java课程入门与进阶1
  11. 9款常用的数据可视化工具推荐
  12. 关于「微软拼音」自定义文本这件事
  13. java xap_阻止xap文件在浏览器中缓存
  14. 计算机访问网络延迟越低越好吗,网速和网络延迟(网络延迟取决于什么)
  15. java sencha_Sencha Cmd 5 Java 8错误
  16. Linux审计以及主机的入侵检测系统HIDS编写
  17. centos7 安装 oceanbase 单机版测试
  18. 刚刚,ChatGPT官宣数学能力再升级,网友:终于精通十以内加减法了
  19. 开始我的WebWork之旅
  20. 网站流量度量术语 IP PV UV

热门文章

  1. 【Android Demo】悬浮窗体实现
  2. CSS教你玩转背景background-position(1)
  3. Maven settings.xml配置详解
  4. hibernate延迟加载lazy的原理,以及为什么session关闭会报错
  5. IBM收购Q1 Labs
  6. web页,如何按回车获得焦点,触发web控件事件..?
  7. sessionStorage 、localStorage 和 cookie 之间的区别
  8. CentOS7.X更新gcc到5.3.0
  9. 奇虎360正式开源其深度学习调度平台,支持TensorFlow、MXNet等框架
  10. Docker折腾手记-linux下安装