Struts——标签

为什么要使用标签

标签的作用:对于一个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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值