Struts——标签

来源:互联网 发布:台湾同性网络剧2017 编辑:程序博客网 时间:2024/05/22 03:16

为什么要使用标签

标签的作用:对于一个MVC框架来说,model就不用说了,重点是实现控制和视图两个部分。在struts中,控制器主要有Action来提供支持的,视图则是由标签来提供的。(struts2内建的标签库简化了JSP页面的输出逻辑的实现,可以完全避免在JSP页面中使用JAVA脚本,提高了表现组件的可维护性)

UI标签:

表单标签

在普通HTML页面中,表单使用的是标签

<form action="/hellodworld/**.action" method="post/get"></form>

Struts2中有对应的标签:

<s:form action="**.action" method="post"></form><s:form action="**.action" method="post" namespace="/test"></form>

的action属性不用带应用上下文,例如:/helloworld,可以使用namespace属性来指定使用到的命名空间。

单选框标签

<s:checkbo label="已婚" name="user.married" value="false" fieldValue ="false"> 

value:是否选中
fieldValue:相当于传统checkbox中的value值

复选框

list:用于生成单选框的集合
listkey:生成的radio的value属性
listValue:生成的radio后面显示的文字
value:当前的默认选项

<s:checkboxlist name="user.hobbies" list="hobbies"/><s:checkboxlist name="user.hobbies" list="'篮球','足球','排球'"/><s:checkboxlist name="user.hobbies" list="hobbies" listKey="hid" listValue="hname" value={...}/>

下拉框

<!--  直接指定list集合里面的值--><s:combobox label="选择你喜欢的颜色" name="colorNames"headerValue="------请选择------" headerKey="1"list="{'红','橙','黄','绿','青','蓝','紫'}" /><!--  动态绑定list集合里面的值 --><s:combobox label="选择你喜欢的颜色" name="colorName"headerValue="------请选择------" headerKey="1" list="colors" /><!--  动态生成的值 --><s:bean name="struts.util.Counter" var="year"><s:param name="first" value="1990"/><s:param name="last" value="2000"/> </s:bean>

二级选择框

TestAction:

    Map<String, List<String>> map = new HashMap<>();    List<String> l1 = new ArrayList<>();    l1.add("a");    l1.add("b");    map.put("一", l1);    List<String> l2 = new ArrayList<>();    l2.add("aaa");    l2.add("bbb");    map.put("二", l2);           List<String> l3 = new ArrayList<>();    l3.add("aaaaaaaa");    l3.add("bbbbbbbb");    map.put("三", l3);
<s:doubleselect label="选项" name="user.ch1" list="%{map.entrySet()}" listKey="key" listValue="key" doubleName="user.ch2" doublelist="value"/>

如图:这里写图片描述

属性说明:
formName:对应的表单名称。
label: 该级联下拉列表的标签。
name:第一个下拉列表的名称。
id:第一个下拉列表的id的名称。
list:指定用于输出第一个下拉列表框中选项的集合。
listKey:指定集合元素中的某个属性作为第一个下拉列表的value。(提交是的参数名)
listValue:指定集合元素中的某个属性作为第一个下拉框的标签。(显示出来的值)
其他同理。

单选框标签

list:用于生成单选框的集合
listKey:生成radio的value属性
listValue:生成radio后面显示的文字
value:当前默认选项

<s:radio name="user.gender" list="{‘男’, ‘女’}" listKey="name" listValue="age"/><s:radio name="user.gender" list="#{‘m’:’男’, ‘f’:’女’}" listKey="key" listValue="value"/><s:radio name="user.major.majorid" list="majorList" listKey="majorid" listValue="name"/>

非UI标签

标签

property标签用于输出指定的值,这个值可以是任何ONGL可以访问到的值,例如Action的属性,或者是request,session,application作用域中的值,也可以是某个类的静态方法和静态属性值,甚至是Math类中的方法。

获取的是requet中的对象值

    <s:property value="#request.user1.realName"/>    <s:property value="#request.user1['realName']"/>    <s:property value="#user1.realName"/>       <s:property value="#user1['realName']"/>    ${requestScope.user1.realName }  ||  ${requestScope.user1['realName'] }    <s:property value="#attr.user1.realName"/>

获取session中的值

    <s:property value="#session.user1.realName"/>    <s:property value="#session.user1['realName']"/>       ${sessionScope.user1.realName }  ||  ${sessionScope.user1['realName'] }   

获取application中的对象的值

    <s:property value="#application.user1.realName"/>    <s:property value="#application.user1['realName']"/>    ${applicationScope.user1.realName }  ||  ${applicationScope.user1['realName'] }

标签

iterator标签用于对集合进行迭代,这里的集合包含List、Set和数组。
value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
id:可选属性,指定集合里元素的id。
status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
int getCount(),返回当前迭代了几个元素。
int getIndex(),返回当前迭代元素的索引。
boolean isEven(),返回当前被迭代元素的索引是否是偶数
boolean isOdd(),返回当前被迭代元素的索引是否是奇数
boolean isFirst(),返回当前被迭代元素是否是第一个元素。
boolean isLast(),返回当前被迭代元素是否是最后一个元素。

直接创建List类型集合的语法为: {e1, e2, e3, …}。
直接创建Map类型集合的语法为: # {key0:value0, key1:value1, key2:value2,…..}。

第一种:list或set集合中的使用

    <!-- 使用set生成一个集合-->    <s:set name="list" value="{'a','b','c','d'}"></s:set>    <!-- list存放默认到request中,以value="#request.list" 引用 -->    <s:iterator var="ent" value="#request.list" status="statu">                    <s:property value="#ent" />    </s:iterator>    <s:iterator value="{'a','b','c'}" id='char' status='st'>        <s:if test="#st.even">            现在的索引是奇数为:<s:property value='#st.index'/>        </s:if>         当前元素值:<s:property value='char'/>     </s:iterator> 

第二种:map集合中的使用
map集合生成语法格式:# {key0:value0, key1:value1, key2:value2,…..}。以上的语法中就直接生成了一个Map类型的集合,该Map对象中的每个key-value对象之间用英文的冒号隔开,多个元素之间用逗号分隔。

    <s:set var="map" value="#{'1':'laowang','2':'老王','3':'猩猩'}"></s:set>    <s:iterator value="#map">        <s:property value="key" /> : <s:property value="value" />    </s:iterator>    <s:iterator value="map" id="id" status="st">         编号 : <s:property value='#st.count'/>         key : <s:property value='key'/>         value:<s:property vlaue='value'/>     </s:iterator> 

第三种:集合的筛选遍历

    <!-- 遍历出价格大于3000的 -->    <s:iterator var="user" value="#session['users']">        <s:if test="%{#user['price']>3000}">            <s:property value="#user['price']"/>        </s:if>    </s:iterator>    <!-- $是取出价格 大于3000的最后一个值 -->    <s:iterator var="u" value="#session.users.{$(#this['price']>3000)}">        <s:property value="price"/>    </s:iterator>

第四种:遍历2个list

List<AttrName> attrN {color,size,style}    List<AttrValue> attrV {red,20,gay}这2list的元素是一一对应的,一个attrN对应一个attrV    <s:iterator value="%{attrN }" id="id"   status="status">         index is : <s:property value='status.index'/>         attrName is : <s:property value='id'/> or <s:property value='%{id}'/>         attrName is : <s:property value='%{attrV[#status.index]}'/>     </s:iterator>  
0 0