[关闭]
@liayun 2016-10-03T23:48:03.000000Z 字数 6522 阅读 1545

Struts2框架进阶(六)

Struts框架学习


这是Struts2框架进阶六,本文将详细讲解Struts2标签。

property标签

property标签用于输出ognl表达式的值。如:

  1. <s:set name="name" value="'kk'" />
  2. <s:property value="#name"/>

iterator标签

iterator标签用于对集合进行迭代,这里的集合包含List、Set和数组。如:

  1. <s:set name="list" value="{'zhangming','xiaoi','liming'}" />
  2. <s:iterator value="#list" status="st">
  3. <font color=<s:if test="#st.odd">red</s:if> <s:else>blue</s:else>>
  4. <s:property />
  5. </font>
  6. <br>
  7. </s:iterator>

现在我们就使用该标签来迭代集合,并隔行间色显示。我们要在WebRoot根目录下新建一个用于测试的jsp页面——test.jsp。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>测试页面</title>
  9. </head>
  10. <body>
  11. <s:set name="list" value="{'zhangming','xiaoi','liming'}" />
  12. <s:iterator value="#list" status="st">
  13. <font color=<s:if test="#st.odd">red</s:if> <s:else>blue</s:else>>
  14. <s:property />
  15. </font>
  16. <br>
  17. </s:iterator>
  18. </body>
  19. </html>

测试,结果如下:
记得插图

if/elseif/else标签

我们仍然举例来说明这个标签的使用。我们修改test.jsp页面的内容为:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>测试页面</title>
  9. </head>
  10. <body>
  11. <s:set name="age" value="233" scope="request" />
  12. <s:if test="#request.age==23"> <!-- 要明白为什么使用#?因为存放在上下文中 -->
  13. 23
  14. </s:if>
  15. <s:elseif test="#request.age==21">
  16. 21
  17. </s:elseif>
  18. <s:else>
  19. 都不等
  20. </s:else>
  21. </body>
  22. </html>

测试,结果如下:
记得插图

url标签

例如,以下url标签:

  1. <s:url action="helloworld_add" namespace="/test">
  2. <s:param name="personid" value="23"/> <!-- value属性的值可以接收OGNL表达式 -->
  3. </s:url>

可以生成如下路径:

/struts2_taglib/test/helloworld_add.action?personid=23

粗体部分为内容路径。
value属性的值按ognl来解析,解析不出来则原样输出。即:value中可以存放ognl表达式。请看下面一个例子:

  1. <s:set name="myurl" value="'http://www.foshanshop.net'"/>
  2. <s:url value="#myurl" /><br>
  3. <s:url value="%{#myurl}" /><br>

输出结果将是:

#myurl
http://www.foshanshop.net

<s:url value="#myurl" />将"#myurl"当成字符串处理,而不是ognl表达式,所以会原样输出。
<s:url value="%{#myurl}" />:"%"符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。%{ }的意思是将里面的内容按照ognl表达式处理
注意:当ognl表达式当做字符串处理时,请使用%{ }
使用url标签的好处是:自动生成的url中,会自动添加上当前路径和后缀。在实际开发中,我们一般都会这样使用:

  1. <a href="<s:url action="helloworld_add" namespace="/test"><s:param name="personid" value="23"/></s:url>">点击该链接</a>

页面效果为:
点击该链接
将鼠标移到该链接上会发现里面自动生成下面的url:

http://localhost:8080/struts2_taglib/test/helloworld_add.action?personid=23

粗体部分会自动加上。

表单标签——checkboxlist复选框

如果集合为List,则以下checkboxlist复选框标签

  1. <s:checkboxlist name="list" list="{'Java','.Net','RoR','PHP'}" value="{'Java','.Net'}"/>

会生成如下html代码:

  1. <input type="checkbox" name="list" value="Java" checked="checked"/><label>Java</label>
  2. <input type="checkbox" name="list" value=".Net" checked="checked"/><label>.Net</label>
  3. <input type="checkbox" name="list" value="RoR"/><label>RoR</label>
  4. <input type="checkbox" name="list" value="PHP"/><label>PHP</label>

注意:若是自动生成的html代码,则会在上面的代码外侧加上<tr><td>标签,但这些是没有必要的。这时候,在struts.xml中配置常量

  1. <constant name="struts.ui.theme" value="simple" />

就可以让其不帮我们生成乱七八糟的代码了。
如果集合为Map,则以下checkboxlist复选框标签

  1. <s:checkboxlist name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key" listValue="value" value="{1,2,3}"/>

map对象放在栈顶,listKey指的是访问栈顶对象的key属性,该属性作为input属性中的value的值,listValue的值作为label的值。value指的是,如果key在这个集合中,则会勾选上。
上面的checkboxlist复选框标签会帮我们生成如下html代码:

  1. <input type="checkbox" name="map" value="1" checked="checked"/><label>瑜珈用品</label>
  2. <input type="checkbox" name="map" value="2" checked="checked"/><label>户外用品</label>
  3. <input type="checkbox" name="map" value="3" checked="checked"/><label>球类</label>
  4. <input type="checkbox" name="map" value="4"/><label>自行车</label>

如果集合里存放的是javabean,如:

  1. <%
  2. Person person1 = new Person(1,"第一个");
  3. Person person2 = new Person(2,"第二个");
  4. List<Person> list = new ArrayList<Person>();
  5. list.add(person1);
  6. list.add(person2);
  7. request.setAttribute("persons",list);
  8. %>

则以下checkboxlist复选框标签:

  1. <s:checkboxlist name="beans" list="#request.persons" listKey="personid" listValue="name"/>

personid和name为Person的属性。
会帮我们生成如下的html代码:

  1. <input type="checkbox" name="beans" value="1"/><label>第一个</label>
  2. <input type="checkbox" name="beans" value="2"/><label>第二个</label>

表单标签——radio单选框

该标签的使用和checkboxlist复选框相同。
如果集合里存放的是javabean,如:

  1. <%
  2. Person person1 = new Person(1,"第一个");
  3. Person person2 = new Person(2,"第二个");
  4. List<Person> list = new ArrayList<Person>();
  5. list.add(person1);
  6. list.add(person2);
  7. request.setAttribute("persons",list);
  8. %>

则以下radio单选框标签:

  1. <s:radio name="beans" list="#request.persons" listKey="personid" listValue="name"/>

personid和name为Person的属性。
会帮我们生成如下的html代码:

  1. <input type="radio" name="beans" id="beans1" value="1"/><label>第一个</label>
  2. <input type="radio" name="beans" id="beans2" value="2"/><label>第二个</label>

如果集合为Map,则以下radio单选框标签:

  1. <s:radio name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key" listValue="value" value="1"/>

会帮我们生成如下的html代码:

  1. <input type="radio" name="map" id="map1" checked="checked" value="1"/><label for="map1">瑜珈用品</label>
  2. <input type="radio" name="map" id="map2" value="2"/><label for="map2">户外用品</label>
  3. <input type="radio" name="map" id="map3" value="3"/><label for="map3">球类</label>
  4. <input type="radio" name="map" id="map4" value="4"/><label for="map4">自行车</label>

如果集合为List,则以下radio单选框标签:

  1. <s:radio name="list" list="{'Java','.Net'}" value="'Java'"/>

会帮我们生成如下的html代码:

  1. <input type="radio" name="list" checked="checked" value="Java"/><label>Java</label>
  2. <input type="radio" name="list" value=".Net"/><label>.Net</label>

表单标签——select下拉选择框

例1,以下select下拉选择框标签:

  1. <s:select name="list" list="{'Java','.Net'}" value="'Java'"/>

会帮我们生成如下的html代码:

  1. <select name="list" id="list">
  2. <option value="Java" selected="selected">Java</option>
  3. <option value=".Net">.Net</option>
  4. </select>

例2,以下select下拉选择框标签:

  1. <s:select name="beans" list="#request.persons" listKey="personid" listValue="name"/>

会帮我们生成如下的html代码:

  1. <select name="beans" id="beans">
  2. <option value="1">第一个</option>
  3. <option value="2">第二个</option>
  4. </select>

例3,以下select下拉选择框标签:

  1. <s:select name="map" list="#{1:'瑜珈用品',2:'户外用品',3:'球类',4:'自行车'}" listKey="key" listValue="value" value="1"/>

会帮我们生成如下的html代码:

  1. <select name="map" id="map">
  2. <option value="1" selected="selected">瑜珈用品</option>
  3. <option value="2">户外用品</option>
  4. <option value="3">球类</option>
  5. <option value="4">自行车</option>
  6. </select>

总结

Struts2框架里面还要其他标签,我就不一一详解了,大家只要关注以上几个重要标签即可。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注