上一篇博客主要讲述了前端从值栈中拿取单个数据的方式,而往往我们拿取的可能是以对象或者列表的方式进行拿取数据的。(场景:显示图书的信息时,我们需要从数据库中拿取数据并传送到前端)那么我们如何操作哪
从值栈中拿取对象中的数据
User.java
!!!!在实体类中主要不要命名这样的属性uName
这样编译器构造出来的set方法是setuName
这样是无法获取到数据的,要使用标准的小驼峰命名规则userName
这样是可以的。我测试了好久才知道。
后端action的写法
public class ognlObject extends ActionSupport{
private User user =new User();//必须要这样初始化 不然会报空指针异常
//写get方法
public User getUser(){
return user;
}
//写动作
public String execute(){
user.setName("sofency");
user.setUpwd("19980120");
user.setUaccount("416161616");
return SUCCESS;
}
}
//前端如何写
<s:property value="user.name"/>
<s:property value="user.age"/>
<s:property value="user.uaccount"/>
寻找过程 根据user.name的user通过action找到getUser()方法将返回值赋值给user;然后调用name属性
从值栈中获取列表里面的值
//后端action里面的写法和对象类似
public class ognlList extends ActionSupport{
private List<User> list =new List<User>();//必须要这样初始化 不然会报空指针异常
//写get方法
public User getList(){
return list;
}
//写动作
public String execute(){
User user1=new User("sofency","191991","21212");
User user2=new User("alice","112","2121");
User user3=new User("hello","1912121991","2122212");
list.add(user1);
list.add(user2);
list.add(user3);
return SUCCESS;
}
}
前端调用的三种方式
- 知道后端有多少数据的情况下 使用笨办法 类似于模型驱动list一样
<s:property value="list[0].name"/>
<s:property value="list[0].age"/>
<s:property value="list[0].uaccount"/>
<s:property value="list[1].name"/>
<s:property value="list[1].age"/>
<s:property value="list[1].uaccount"/>
<s:property value="list[2].name"/>
<s:property value="list[2].age"/>
<s:property value="list[2].uaccount"/>
- 遍历器
<s:iterator value="list">
<s:property value="name"><!--很神奇不用知道对象是如何封装的-->
<s:property value="upwd">
<s:property value="uaccount">
</s:iterator>
- 类似于foreach的方法
存储机制
遍历值栈 list集合,得到每个user 对象
机制 :把每次遍历出来的user对象放到context下面
获取context 里面数据 写ognl表达式
使用特殊符号 #
<s:iterator value="list" var="user">
<s:property value="#user.name"><!--很神奇不用知道对象是如何封装的-->
<s:property value="#user.upwd">
<s:property value="#user.uaccount">
</s:iterator>
小bug提示
我们在前端页面中写ognl表达式时,如何想要注释掉ognl的表达式,不能使用html的注释<!--<s:property value="sofency"/>-->
这样是无法注释的,会报错
我们可以通过jsp的注释语法进行注释
<%--<s:property value="alice">--%>