从值栈获取字符串
<s:property value="name"/>
从值栈获取对象
账号: <s:property value="user.username"/><br/>
密码: <s:property value="user.password"/><br/>
地址: <s:property value="user.address"/><br/>
从值栈获取list集合
方法一:根据下标获取
<s:property value="list[0].username"/>
<s:property value="list[0].password"/>
<s:property value="list[0].address"/>
<br/>
<s:property value="list[1].username"/>
<s:property value="list[1].password"/>
<s:property value="list[1].address"/>
<br/>
方法二:根据struts2标签<s:iterator>迭代
<s:iterator value="list">
<!-- 遍历list得到list里面每个user对象 -->
<s:property value="username"/>
<s:property value="password"/>
<s:property value="address"/>
<br/>
</s:iterator>
方法三:通过ognl表达式与struts2标签遍历
<s:iterator value="list" var="user">
<!-- 遍历值栈list集合,得到每个user对象
机制: 把每次遍历出来的user对象放到 context里面
获取context里面数据:使用ognl表达式,前面加特殊符号 #
放在context里面,避免空间浪费 -->
<s:property value="#user.username"/>
<s:property value="#user.password"/>
<s:property value="#user.address"/>
<br/>
</s:iterator>
获取使用set方法存值得数据
<s:property value="name"/>
获取使用push方法存值得数据
- 使用push方法设置值,没有名称,只有设置的值
- 向值栈放数据,把向值栈放数据存到数组里面,数组名称top,根据数组获取值
- 根据数组下标获取值,遵循先进后出原则
<s:property value="[0].top"/>
为什么EL表达式可以获取值栈数据?
<c:out value="${itcast}"></c:out>
- EL表达式获取域对象值
- 向域对象里面放值使用setAttribute方法,获取值使用getAttribute方法
- 底层增强request对象里面的方法getAttribute方法
- 首先从request域获取值,如果获取到,直接返回
- 如果从request域获取不到值,到值栈中把值获取出来,把值放到域对象里面