文档章节

action不能往jsp中传递数据的问题

w
 wuwulh
发布于 2010/08/23 00:59
字数 369
阅读 94
收藏 1

struct z中一个action的配置如下:

 
    path="/library"
    parameter="method"
    name="libraryForm"
    scope="request"
    validate="true"
    type="org.springframework.web.struts.DelegatingActionProxy">
   
        name="listLibrarys"
        path="/form/listlibrarys.jsp"
        redirect="true" />
     
     
   

action 中部分源代码:

 public ActionForward list(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  log.debug("list library ");
  
  List list = libraryManagerService.listLibrarys();
  
  if(list == null) log.debug("there is not any library ,because list is null");
  else log.debug("there are " + list.size() + " librarys .");
  
  request.setAttribute("list", list) ;
 // request.getSession().setAttribute("list", list);
  return mapping.findForward("listLibrarys");
 }
 

jsp中部分源代码:


 














                                 
${library.code}
${library.name}
${library.buildTime}
">添加
">修改
">删除

 

问题:


一次也不能循环.

在action的 List list = libraryManagerService.listLibrarys();后中加入:

 log.debug("list size="+list.size());

运行结果:list size=6.

 原因是:

 
        name="listLibrarys"
        path="/form/listlibrarys.jsp"
        redirect="true" />

中的redirect="true".直接转向后.request中的数据丢失.

改为redirect="false"即可.

 

redirect 决定了action在使用forward跳转的时候是使用

RequestDispatcher rd = getServletContext().getRequestDispatcher(uri).forward(request, response);

还是

 response.sendRedirect(response.encodeRedirectURL(uri));

在structs的类RequestProcessor中processForwardConfig方法里面有如下代码:

 if(forward.getRedirect())//判断redirect是否为true
        {
            if(uri.startsWith("/"))
                uri = request.getContextPath() + uri;
            response.sendRedirect(response.encodeRedirectURL(uri));
        } else
        {
            doForward(uri, request, response);
        }

其中的方法doForward如下:

protected void doForward(String uri, HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
    {
        RequestDispatcher rd = getServletContext().getRequestDispatcher(uri);
        if(rd == null)
        {
            response.sendError(500, getInternal().getMessage("requestDispatcher", uri));
            return;
        } else
        {
            rd.forward(request, response);
            return;
        }

这两种跳转方法的区别是:

forward 会将 request state , bean 等等信息带往下一个 jsp

redirect 是送到 client 端后,再由client向服务器发送request,服务器接收到后来发的request中已经不包含上次的request的state,bean等信息了。所以在jsp中就接收不到相应的数据

本文转载自:http://hpujsj.blog.163.com/blog/static/118743082007112603631211

w

wuwulh

粉丝 12
博文 53
码字总数 6288
作品 1
东城
私信 提问
jsp地址传值到servlet不能读取

我在jsp页面中通过 来传递action的值,可是在servlet页面中不能读取出来。 我通过和 隐式地传递,在servlet页面就能读取出来,这哪里出错了?

藍色的海
2012/04/14
623
3
struts-request 请求参数的生命

以前我看过很多文章,大概的意思是:挡在浏览器请求时就会生成一个新的线程,request就会在整个线程的生命周期里,jsp->action->jsp,当线程注销时,request也会注销,当你再次请求浏览器时,...

cookqq
2012/04/06
172
0
Java学习资料-Servlet单例多线程

Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并...

晓阳
2015/02/26
137
0
java web开发中需要弄清楚的一些概念

1.getParameter和getAttribute区别 rquest.getParameter() 获取POST/GET传递的参数值,返回的是String,用于读取提交的表单中的值; rquest.getAttribute() getAttribute是取得jsp中 用setAttr...

FoxHu
2011/12/03
308
1
超详细的Java面试题总结之JavaWeb基础知识总结

Servlet总结: 在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletResponse反馈给用户。Servlet可以设置初始化参数,...

Java互联网架构师
2018/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部