0.前言
其实我之前学过Struts2,大致知道怎么配置struts.xml文件、web.xml文件,写一个Action,里面补上setter、getter和execute就好了,自从学习了Struts1之后,对struts2的理解更深刻了,也知道其改进和优化的地方在哪里。
1.struts标签跳转连接
<html:link page="/05.jsp">链接2</html:link>
可以使用这种方式进行跳转,但是要记得page后面的虚拟目录需要加上“\”,不然会报错。
<html:link forward="result">链接2</html:link>
也可以使用这种方式进行跳转,但是forward后面的文字需要在struts-config.xml的global-forwards中进行配置
<global-forwards>
<forward name="result" path="/05.jsp"></forward>
</global-forwards>
2.利用struts标签在跳转时传递参数
在url后面加上问号再加上传递的参数值是一个很常用的方法,但是这个方法有很多的局限性,比如不太灵活等等,因此采用另一种方式去自动获得参数是一个不错的选择。
<%
session.setAttribute("msg","欧世乐");
%>
<html:link page="/05.jsp" paramId="param" paramName="msg">链接2
</html:link>
这种方式的跳转链接指定了获取参数来自何方(paramName就是指明此参数来自何处)
在结果的jsp页面就可以显示出传递过来的值了
姓名:<%=session.getAttribute("msg") %>
session或者requets都可以存储许多值,比如说集合,这是普通的url传值做不到的,这种传值方式很方便。
3.如何传递JavaBean的参数
在JSP页面实例化一个Student,用setter设置其初始值,将这个JavaBean存入session
<%
Student student=new Student();
student.setName("欧乐乐");
session.setAttribute("msg2", student);
%>
在标签中获取利用paramProperty获取JavaBean的属性值
<html:link page="/05.jsp" paramId="param" paramName="msg2" paramProperty="sex">链接3
</html:link>
在结果页面中获取session即可
性别:<%=session.getAttribute("msg2") %>
这里的结果是一个地址,很正常,因为需要使用bean标签进行显示
4.bean标签读取数据
就上文的问题,避免输出bean的地址,而是一个确切的值,我们将使用bean标签的write功能
<bean:write name="msg2" property="sex"/><BR>
这里的name会自动获取session,如果session里面装的是一个对象,property是这个对象的属性之,比如这里session装的是Student,那么这个property就是其属性值。
bean:write标签的好处还有可以原样输出文本,不用担心html标签会被应用。当然也可以利用fliter:false使标签得以应用。
5.bean标签使用Cookie
首先要声明的一点,在JSP页面写Cookie是不符合MVC原则的,所以应该尽量去避免,利用bean标签读cookie是符合MVC原则的。
在一个页面生成一个Cookie
<%
response.addCookie(new Cookie("username","Mars"));
%>
在另一个页面利用bean标签获取cookie
<bean:cookie name="username" id="cookie1"/>
<bean:write name="cookie1" property="value"/>
因为cookie有个属性值是value,所以要在property里面补充一下,不然出来的还是地址。
6. Logic标签
1.判断bean标签的值是否为正确
<logic:equal name="str" value="Man">
OK
</logic:equal>
如果str的值为Man,那么就是显示OK字样,否则不会显示
至于这里的str来自于bean标签
<bean:parameter id="str" name="param"/>
2.判断session内是否有个名字叫做XX的成员
<logic:present name="msg2">
OKK
</logic:present>
如果存在,那么就是显示OKK字样,否则不会显示
3.遍历
3.1 简单集合
在一个页面写好集合
<%
ArrayList books=new ArrayList();
books.add("三国演义");
books.add("水浒传");
books.add("红楼梦");
books.add("西游记");
session.setAttribute("books", books);
%>
在另一个页面利用logic标签进行遍历
<logic:iterate id="book" name="books">
<bean:write name="book"/>
</logic:iterate>
3.2 集合里面含有JavaBean
在一个页面写好集合
<%
ArrayList stu=new ArrayList();
Student stu1=new Student();
Student stu2=new Student();
Student stu3=new Student();
stu1.setName("O");
stu.add(stu1);
stu2.setName("S");
stu.add(stu2);
stu3.setName("L");
stu.add(stu3);
session.setAttribute("stu4", stu);
%>
在另一个页面利用logic标签进行遍历
<logic:iterate id="stu3" name="stu4">
<bean:write name="stu3" property="name"/>
</logic:iterate>
3.3 JavaBean里面含有集合
假设这个学生有多个电话号码
在一个页面写好集合
Student stu5=new Student();
ArrayList phones=new ArrayList();
phones.add("123456");
phones.add("789999");
stu5.setPhones(phones);
session.setAttribute("stu5",stu5);
在另一个页面利用logic标签进行遍历
<logic:iterate id="phone" name="stu5" property="phones">
<bean:write name="phone"></bean:write>
</logic:iterate>
因为这里的stu5是一个对象,所以我们要遍历这个对象的属性值
3.4 遍历HashMap(复杂集合)
在一个页面写好集合
<%
HashMap hm=new HashMap();
hm.put("param1", "OSL");
hm.put("param2", "男");
hm.put("param3", "20");
session.setAttribute("paramList", hm);
%>
在另一个页面利用logic标签进行遍历
<logic:iterate id="element" name="paramList">
<bean:write name="element" property="key"/>
<bean:write name="element" property="value"/>
</logic:iterate>
哈希表采用的是键-值模式的集合
4.小结
Strust基本知识就此完毕了,这些都是基本的标签,其他的标签有些违背了MVC的原则,如果想要了解也是可以的。