前两期的内容不知道大家理解的怎么样,我并没有详细的去解释代码的意思,如果你已经自己都钻研明白了,那最好过,但还是一知半解的话,接下来我会仔细分析代码。
1.register.jsp:这部分代码只是简单的注册界面,把数据提交到UserAction,执行其save方法,save方法都执行了哪些内容呢?
根据之前的学习可知,UserAction会接受到register提交来的信息,由于我们输入了username和password,那么就会自动调用对应的set方法。在save方法中,创建了一个user实例,并把信息储存进去,调用UserDB的静态save方法把实例保存到数据库,如果这一句执行成功的话,就能保证信息存储在数据库中了。之后为了显示用户的列表,需要把数据库中的所有注册信息拿出来,只要调用UserDB的listall ()方法即可,为了转发list中的信息,我们可以把list信息放到request中,方法就是调用期setAttribute方法,我们知道,request的作用范围是在一个转发状态下,这样,我们在页面转发的过程中,就可以随时取得request中的list。最后如果没有没问题,会return一个success。
对于delete方法和getUser方法道理是一样的。
2.listAll.jsp:
返回success后,通过默认的dispatch方式,转发到listAll.jsp,这样listAll.jsp中就会收到信息了。
<s:iterator value="#request.list" id="user"> <tr> <td><s:a href="getUser.action?username=%{#user.username}"> <s:property value="username" /></s:a></td> <td><s:a href="getUser.action?username=%{#user.user}"></s:a> <s:property value="password" /></td> <td><s:a href="deleteUser.action?username=%{#user.username}" onclick="return del()">delete</s:a></td> </tr> </s:iterator>
首先调用iterator标签,得到要迭代的列表,td标签中表面上包含了三个超链接,实际上只有两个,因为第二个并没有在<s:a></s:a>之间,对于第一个超链接代表含义如下:
1.getUser.action:超链接到的url,这里和form的action中的意思是一样的。
2.?username=%{#user.username}:信息的传递,?后面的username其实是在getUser.action中的,也就是UserAction中的username,那么这个username的只是什么呢,就是user.username,由于每一个user都是一个bean对象,前面需要加入#来取值,前面的%,是保证{}内的是OGNL表达式。
3.property标签:username和password都是存放在值栈中的,可以直接输出。
4.del(),这里其实涉及到了javasript的知识,其目的知识弹出来一个对话框,如果确定则执行程序。javascript代码如下:
<script type="text/javascript"> function del() { if(confirm("are you sure")) { return true; } return false; } </script>
javascript一定包含在head里。
查看的执行结果:
点击一个链接:
点击delete链接:
这样我们就完成了信息的查看与删除。
不知道细心的同学不知道有没有注意到,如果我们注册一个用户,在用户列表界面刷新一下界面,控制台会有:
也就是说,我们刷新了界面,再一次执行了save,但是由于主键不能重复,会显示增加用户异常,这不是我们希望看到的,我们要做到,刷新界面,不会添加新的数据到数据库。
在下一期中会给出解决办法,和更新用户的方法。