假设有下面这个Action
public class Action{ public User user; Public List<Role> allRole; // getter and setter for user and role }
然后,有下面这两个POJO
public class User { private int id; // getter and setter for id }
public class Role { private List<User> user; // getter and setter for user }
页面与上面的Action进行绑定,且在页面中,像下面这样使用了 iterator 标签
<s:iterator value="allRole" var="role"> <s:property value="user.id"> </s:iterator>
页面的本意是,在遍历 action 中 allRole 的时候,同时将 action 中 user 的id 给输出出来。
但是,你发会现,将无法获取action中user对象中的id。这是为什么呢?
因为在 iterator标签 中,通过 var 属性 声明的变量 'role' (代表了 Role 类)将被压入Struts2的 valuestack 中,且处于valuestack中第0个元素的位置。然后,OGNL在解析 ‘user.id’ 表达式 的时候,会从valuestack的第0个元素去查找。也就是说,它将先从上面的 ‘role’ 变量进行查找。恰好的是,这个 ‘role’ 变量所代表的 Role 类中,刚好也包含一个 名为 ‘user’ 的字段。这样一来,OGNL 就不会再去找 action中的user变量了。
所以,为了避免这个问题的发生,可以采用以下两个方式
① 修改字段名称,使得 action中和role中不要存在同名变量名
② 通过指定下标,让OGNL解析的的时候,直接从 valuestack 的指定元素进行查找,如上例可以修改为:
<s:property value="[1].user.id"/>
这样一来,OGNL就可跳过 valuestack中的第0个元素,直接从第 1 个元素开始查找 user,这样就没问题了。
相关推荐
在Struts2中,`iterator`标签是用于遍历集合数据的重要工具,它可以用来迭代Map、List和数组等数据结构,以便在视图层进行展示。本篇文章将深入探讨`iterator`标签在遍历这些数据类型时的具体用法。 首先,我们来看...
Struts 2 标签库(文档手册) Tags-API-CLSW-JSP <%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-...
10. **s:iterator标签**:用于迭代集合,常用于遍历列表、数组或Map,可以在循环内部嵌套其他Struts2标签。 11. **s:property标签**:用于显示Action类属性的值,可以格式化输出,支持EL表达式。 12. **s:debug...
当Action类中的属性名与标签中的`value`属性相同时,Struts2框架会通过getter方法获取该值。 ##### 1.3 Textfield标签 Textfield标签用于在前端页面展示Action类中的某个属性值,并允许用户编辑。其基本语法为: ...
如果Action类中不存在对应的属性,也可以通过`HttpServletRequest`的方法`getParameter`获取值: ```java String userName = request.getParameter("userName"); ``` ##### 2. 显示标签 - `<s:property>`标签 `...
- `<s:textfield>`标签可以直接将页面上的输入值设置到Action中的实体对象上,前提是Action中存在对应的对象及属性,并且具备`setter`和`getter`方法。 ##### 2. 显示Action中的属性值 **标签**: `<s:property />...
Struts2标签库是Java Web开发中的一个强大工具,它为开发者提供了丰富的UI组件和控制逻辑,极大地简化了视图层的代码编写。Struts2框架的标签库基于OGNL(Object-Graph Navigation Language)表达式语言,使得在JSP...
下面将详细介绍Struts2中的部分核心标签及其用法。 A. `<s:a>` 和 `<s:action>`: - `<s:a href="">` 标签用于创建超链接,它可以绑定到一个Action,使得链接具有动态性。例如,`<s:a href="myAction.action">Click ...
对于“源码”标签,这可能意味着博客可能会深入到Struts2框架的源代码中,解释迭代器标签的工作原理,以及如何在内部处理Map迭代。 至于“工具”,可能指的是使用Struts2或其他辅助工具(如IDE、调试器)来帮助理解...
4. **遍历集合**:`<s:iterator>`是Struts2中非常实用的标签,用于遍历集合,如List、Set、Map等。通过`value`属性设置遍历的对象,`var`属性定义迭代变量名,`status`属性可以获取当前迭代的状态信息。 5. **条件...
Struts2标签库是由一系列预定义的JSP标签组成的,这些标签与Action类中的属性绑定,用于展示和处理用户输入。它们主要分为两大类:Display Tags(显示标签)和Form Tags(表单标签)。Display Tags用于显示数据,如`...
在使用Struts2标签时,通常会结合Action类和模型数据,Action类处理业务逻辑,将结果放入值栈,而标签则从值栈中获取数据并显示在页面上。例如,`s:property`标签可以这样使用: ```jsp ``` 这里的`user`是值栈上...
在 Struts2 中,`<s:if>` 标签是一种常用的条件判断标签,用于在页面上根据不同的条件展示不同的内容。`<s:if>` 标签依赖于 Struts2 提供的强大表达式语言——OGNL(Object-Graph Navigation Language),该语言可以...
而在 Struts2 中,所有的标签都被统一管理,并通过在 JSP 文件头部声明 `<%@ taglib prefix="s" uri="/struts-tags" %>` 来启用 Struts2 的标签库。这种方式简化了开发过程中的配置工作,使得开发者可以更加专注于...
在Struts2中,模型由Action类表示,视图主要由JSP页面和Struts2的标签库构建,控制器由Struts2框架自身提供,通过拦截器链来处理请求并决定如何响应。 五、实战演练 学习Struts2时,建议通过实际项目练习来加深...
在Struts2中,`<input>`标签被广泛用于从前端页面向后端Action传递参数。例如: ```html ``` 这里,`name`属性定义了参数名,这要求在Action中需定义相应的属性并提供SET/GET方法。如果Action中没有定义该属性,...
例如,JSTL的`<c:set>`标签可以用来设置变量,`<s:action>`在Struts2中用于执行Action,而Spring的`<form:form>`可以创建带有模型绑定和验证的表单。通过深入理解这些API,开发者可以写出更优雅、更高效的代码。 总...
本篇文章将详细讲解如何使用Struts2的标签库,尤其是在页面上以列表的形式展示Action中集合对象的所有元素属性值。 首先,我们需要了解Struts2的核心概念:Action。Action是业务逻辑的载体,它处理请求,执行相应的...
Struts 2 标签库是Java Web 应用程序开发中的一种常用框架,提供了丰富的标签库,帮助开发者快速构建Web 应用程序。本资源摘要信息涵盖了Struts 2 标签库的概述、控制标签、数据标签和表单标签等知识点。 一、...