`

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}介绍

    2. 统一资源定位:在使用Action或者Controller进行重定向或转发时,使用${pageContext.request.contextPath} 可以避免硬编码应用的绝对路径,使得代码更具有可移植性。 3. 与框架集成:许多Web框架如Struts、Spring...

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

    然而,在JavaScript代码中直接使用${pageContext.request.contextPath}会导致一些问题,因为这并不是JavaScript语法的一部分,而是JSP EL的特性。 **问题解析:** 在描述中提到了两种不同的使用方式: **方式一:...

    自定义struts2标签

    UserAction userAction = (UserAction) pageContext.getAttribute("userAction", PageContext.ACTION_SCOPE); if (userAction != null) { username = userAction.getUsername(); } } // 其他方法... } ``` ...

    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; ...

    javaee 标签库

    ${pageScope.name} = pageContext.getAttribute("name"); 9. requestScope:把 request 范围中的 name(属性名)和 value(属性值)进行映射: * request.setAttribute("name","jack"); ${requestScope.name} = ...

    jsp_html_web_实现页面跳转

    在此部分,使用 `pageContext.getAttribute()` 方法从 `application` 范围内获取之前存储的 `"str"` 属性,并将其打印出来。 3. **PageContext提供的管理方法** `PageContext` 类还提供了其他一些方法来管理不同...

    《标签啊,标签!》struts标签介绍.pdf

    例如,可以使用${pageContext.servletContext}来获取当前页面的上下文环境,通过${pageContext.session}获取当前用户会话,使用${pageContext.request}来操作请求,以及${pageContext.response}来操作响应。...

    Struts2拦截器实例.docx

    ${pageContext.request.contextPath}/UserAction_login" method="post"&gt; 用户名:&lt;input type="text" name="user_code"&gt;&lt;br/&gt; 密码:&lt;input type="password" name="user_password"&gt;&lt;br/&gt; 提交"&gt; ``` 在...

    struts ec标签的使用

    ### Struts EC标签的使用详解 #### 一、概述 Struts框架是Java Web开发中的一个强大工具,它提供了一套完整的MVC(Model-View-Controller)模式实现方案,帮助开发者构建出结构清晰、易于维护的应用程序。而EC标签...

    struts1.x标签详解

    String myVarValue = (String) pageContext.getAttribute("myVar", PageContext.SESSION_SCOPE); out.println("myVar 的值为: " + myVarValue + " "); %&gt; ``` #### 四、HTMLTags ##### 1. html:base 用于...

    jsp__demo2.zip

    2. **转换和类型检查**:PageContext提供了强制类型转换的方法,如`pageContext.getAttribute("name", Class type)`,确保获取的属性是期望的类型。 3. **写入响应**:通过`pageContext.getOut()` 方法,可以获取到...

    JSP内置对象使用说明.doc

    PageContext pageContext = (PageContext) pageContext.getAttribute(PageContext.PAGE_CONTEXT); Object attribute = pageContext.getAttribute("attributeName", PageContext.SESSION_SCOPE); ``` 9.Page对象类...

    struts2学习

    这里使用`${pageContext.request.contextPath}`动态生成各个链接的完整URL,确保链接总是指向正确的上下文路径。 通过上述分析,我们可以看到Struts2框架的强大之处在于它能够清晰地组织业务逻辑,简化Web应用的...

    教案《标签啊,标签!》struts标签介绍.pdf

    通过熟练掌握Struts标签及其与EL的结合使用,开发者可以编写出更加整洁、高效的JSP页面,减少Java脚本的使用,提升应用程序的可维护性和可扩展性。在实际项目中,合理运用Struts标签可以大大提高开发效率,同时降低...

    Struts标签Lucene中文分词构建

    String value = (String) pageContext.getAttribute("jSession", PageContext.PAGE_SCOPE).getValue(); out.println("这个cookie的名称是" + name + ",值为" + value + "。 "); %&gt; ``` #### 总结 Struts...

    struts2的自定义标签

    User user = (User) pageContext.getRequest().getAttribute(username); if (user != null) { pageContext.getOut().print("用户名:" + user.getName() + ", 邮箱:" + user.getEmail()); } return SKIP_BODY;...

    struts实现自定义标签

    pageContext.setAttribute("user", user); return SKIP_BODY; } } ``` - 创建 TLD 文件 `mytags.tld`: ```xml &lt;tlib-version&gt;1.0 &lt;jsp-version&gt;1.2 &lt;short-name&gt;mytags &lt;uri&gt;/mytags &lt;name&gt;mytag ...

    tag struts2的自定义标签实例

    总结,Struts2的自定义标签实例涉及到以下几个关键步骤:创建标签实现类、定义标签描述符、在JSP中使用标签以及处理标签逻辑。通过这种方式,我们可以构建强大的视图层组件,使代码更易于理解和维护,同时提升应用的...

    Struts2 自定义标签

    pageContext.setAttribute("result", "自定义标签的输出"); return EVAL_PAGE; } } ``` 3. **配置Struts2**: 在Struts2的配置文件(通常是`struts.xml`)中,添加标签库的配置,让框架知道如何找到并使用这些...

Global site tag (gtag.js) - Google Analytics