`

Struts2标签 使用pageContext.getAttribute("myAtt")返回null

阅读更多
在Struts2 API帮助文档中IteratorGeneratorTag类的说明找到如下例子
Example Three:
Generate an iterator with var attribute
 <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," var="myAtt" />
 <%
  Iterator i = (Iterator) pageContext.getAttribute("myAtt");
  while(i.hasNext()) {
      String s = (String) i.next(); %>
      <%=s%> <br/>
 <%    }
 %>

This generates an iterator and put it in the PageContext under the key as specified by the var attribute.

后copy上面整段代码,执行后,页面显示错误信息,报java.lang.NullPointerException。

改代码,如下:
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," var="myAtt" />
<%
  Iterator i = (Iterator) pageContext.getAttribute("myAtt");
  if(i == null) {%>
	<h1>OH,My God!</h1>  
  <%}else{
	  while(i.hasNext()) {
	      String s = (String) i.next(); %>
	      <%=s%> <br/>
	 <%    }
	 
  }%>

再次执行,结果显示:OH,My God!
从结果可知,pageContext.getAttribute("myAtt");获取不到对象,把它改为pageContext.getAttribute("myAtt",PageContext.REQUEST_SCOPE);即可,结果显示:
aaa
bbb
ccc
ddd

PS:
1.在Debug的过程中也未发现pageContext的attributes下有myAtt的key,而在value stack中可以找到。
2.Struts2中的request是org.apache.struts2.dispatcher.StrutsRequestWrapper。
Method Summary
Object getAttribute(String s)
          Gets the object, looking in the value stack if not found

上面不知官方的例子为何不行?如果你知道,请不吝赐教!谢谢!
有空的话,欢迎到红番薯逛逛
0
5
分享到:
评论
1 楼 RyanHoo 2012-03-03  
官方的例子估计没有运行过,只是一个样例,不能保证正确运行。

我碰到了跟你一样的问题(估计学struts2到generator标签都会碰到这个问题。。),只能怪他们documention的时候没有testing吧。

我查了源码,迭代层次太深,并没有找到蛛丝马迹,显示获得的pageContext是存入request域中。惭愧~~

不过我好好思考了下,就像JSP中一样,你若是generate一个Collection或者Iterator,存放用户的购物车,总要把这些信息传出去的,服务器跳转的情况下在下一个页面能访问到。而session域的话,有点不合情理,不安全,life-cycle也太长,application就更不可能了。
因此将var属性定义的集合存入request域中应该是理想的选择。

最后,谢谢你。

相关推荐

    jsp页面中${pageContext.request.contextPath}介绍

    ${pageContext.request.contextPath}是JSP取得绝对路径的方法 例如:浏览器地址栏为”http://localhost:8080/test/index.jsp “ 那么:取出来的就是”http://localhost:8080/test”,简写为”/test” /test 等价于 ...

    java web 登录验证码生成类

    ${pageContext.request.contextPath}/checkcode.jsp"/&gt; 另外在web.xml中配置验证码类的加载: &lt;servlet-name&gt;CheckCodeImage &lt;servlet-class&gt;com.netshop.common.util.CheckCodeImage&lt;/servlet-class&gt; ...

    JavaScript中${pageContext.request.contextPath}取值问题及解决方案

    在JSP里取${pageContext.request.contextPath},方式一是可以正常取到,但方式二却取到的是 字符“${pageContext.request.contextPath}” 方式一: [removed] var t = "${pageContext.request.contextPath}"; ...

    EL表达式详解关于web的问题

    好东西,希望对你有帮助 pageContext.getAttribute("username") -&gt; request.getAttribute("username") -&gt; session.getAttribute("username") -&gt; application.getAttribute("username")

    java.lang.NoSuchMethodError: javax/servlet/jsp/PageContext.getELContext()Ljavax/

    NULL 博文链接:https://albert0707.iteye.com/blog/562969

    人脸识别研究综述

    类似java中的import语句prefix="s" 引用的名称在页面可以使用,就像java中生成的一个对象名,以后调用的时候直接使用就可以了uri="/struts-tags"%表示标签库的路径。相当于import一个具体的类~ 3、${pageContext....

    JSTL高级用法

    ${pageContext.request.remoteUser} 取得用户名称${pageContext.request.remoteAddr } 取得用户的IP 地址${pageContext.session.new} 判断session 是否为新的${pageContext.session.id} 取得session 的ID${...

    jsp+mysql师生作业互动系统

    &lt;li&gt;&lt;a href="${pageContext.request.contextPath}/student!list"&gt;学生信息管理&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="${pageContext.request.contextPath}/exam!list"&gt;学生作业情况查询&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="${pageContext....

    struts2<s:if>使用心得

    href="${pageContext.request.contextPath}/ga/changeTaskAssigment.action?taskInstanceId=&lt;s:property value="id"/&gt;" &gt;我来处理)&lt;/s:if&gt; 受评对象准备评级资料"}'&gt; ${pageContext.request.contextPath}/ga/...

    springMVC+mybatis

    ${pageContext.request.contextPath}/my/login" method="post"&gt; ${message } 邮箱: 密码: 登录"&gt; ${pageContext.request.contextPath}/my/regist"&gt;注册 ${pageContext.request....

    ec标签在struts2.0中的使用

    imagePath="${pageContext.request.contextPath}/images/*.gif" action="${pageContext.request.contextPath}/presidents.run" filterable="false" sortable="false" &gt; ... 里的属性还有......

    ext时间控件,可以选择时分秒

    link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/extjs/pulgins/datetime/datetime.css" /&gt; [removed][removed] [removed][removed] [removed][removed] [removed]...

    jsp运行时的问题集合

    自己在实际开发中,发现并解决问题的总结。

    IPTV频道节目录制查询

    (Integer) pageContext.getAttribute("pagecount"); curpage = (Integer) pageContext.getAttribute("curpage");%&gt; data="translateURL({Status}, 'llinker30', {ROWID}, '{ChannelCode}', '{ContentCode}','...

    基于iframe实现类似于ajax的页面无刷新

    本方法是基于iframe实现的,需求是form表单提交带有文件上传的input标签,因此不能使用ajax来提交 首先: 代码如下: &lt;form id=”form0″ action=”${pageContext.request.contextPath}/news/baikeAdd.form” ...

    EL表达式 (详解)

    ${pageContext.request.remoteAddr } 取得用户的IP 地址 ${pageContext.session.new} 判断session 是否为新的 ${pageContext.session.id} 取得session 的ID ${pageContext.servletContext.serverInfo} ...

    浅谈jsp EL表达式取值过程、page和pagecontext的区别

    也就是说,如果在page.getAttribute()找不到,再去request.getAttribute,如果request找不到,再去session里找,session里找不到,再去application里 page.getAttribute——–&gt;request.getAttribu

    ajax、mysql、jstl实现分页、局部刷新界面

    pageContext.setAttribute("currentPage", request .getParameter("currentPage")); } %&gt; select* from anime &lt;/sql:query&gt; &lt;!-- 得到所有记录数 --&gt; &lt;c:set var="resultNum"&gt; ...

Global site tag (gtag.js) - Google Analytics