struts2学习笔记(十一)——表单和非表单标签

表单标签

Checkboxlist

         可以一次创建多个复选框,有用的属性 list(支持list ,map,对象属性),实例如下:  

        <!-- 使用简单集合来生成多个复选框 -->
        <s:checkboxlist name="bookList" label="请选择你喜欢的技术" list="{'spring','hibernate','struts'}" labelposition="left"> 

        </s:checkboxlist>
        <!-- 使用简单Map对象来生成多个复选框 -->
        <s:checkboxlist name="bookMap" label="请选择你喜欢的出版日期" list="#{'spring':'2006','hibernate':'2007','struts':'2008'}" labelposition="left"
                        listKey="key" listValue="value">
        </s:checkboxlist>
  
        <!-- 使用集合里放多个JavaBean实例来生成多个复选框 -->
       <s:bean name="lee.BookService"  id="bs"></s:bean>
           <s:checkboxlist name="bookBean"  label="请选择你喜欢的图书" list="#bs.books" labelposition="left"
                           listKey="author" listValue="name">
       </s:checkboxlist>


Combobox

         是select和label的组合,但是不提供自动完成功能。如果需要提供自动完成功能,请选择ajax中的autocomplete组件

DoubleSelect

         提供级联select的实现,比较悲惨的是不支持ajax功能。可以先定义一个Map对象,该Map对象的value都是集合,这样就能以Map对象的多个key创建一个下拉列表框的列表项,而每个key对应的集合则用于创建第二个下拉列表框的列表项。。

<s:set name="bs" value="#{'张三':{'struts1', 'spring1' , 'hibernat1'},'李四':{'struts2', 'spring2' , 'hibernate2'},'王五':{'struts3', 'spring3' , 'hibernate3'}}"></s:set>
     <s:doubleselect
            label="请选择您喜欢的图书"
            name="authora" 
            list="#bs.keySet()"
            doubleList="#bs[top]"
            doubleName="booka"/>

Optiontransferselect

         用于多项选择的标签

Radio

         用法类似于checkboxList,生成的是单选框。

Optgroup

         生成一个select,其内容是Ul和li的列表组,相对来说,我觉得Jquery插件支持的效果更好。

<s:select list="#{'zhangsan':'struts','lisi':'spring','wangwu':'hibernate'}"
            name="a" listKey="value" listValue="key">
            <s:optgroup label="Rob"
                        list="#{'jialiu':'ibatis','songqi':'xml'}"
                        listKey="value"
                        listValue="key"></s:optgroup>
            <s:optgroup label="Ror"
                        list="#{'liuwi':'freemarker','ren1':'velocity'}"
                        listKey="value"
                        listValue="key"></s:optgroup>
</s:select>

Token

         用于阻止重复提交,要起作用需要启用拦截器 TokenInteceptor,格式为<s:token />放入form中

实现原理是在表单中增加了一个隐藏域,每次加载页面时该隐藏域的值都不同,而TokenInteceptor拦截所有的用户请求,如果两次token的值相同则阻止表单提交。

Updownselect

         属性类似于 select,不过该标签支持对option的上下移动

非表单标签

Actionerror和actionmessage

         负责输出Action实例中使用addActionError或addActionMessage增加的信息,格式为<s:actionerror /> 和 <s:actionmessage/>

public String execute()
{
   addActionError("第一条错误消息!");
   addActionError("第二条错误消息!");
   addActionMessage("第一条普通消息!");
   addActionMessage("第二条普通消息!");
   return SUCCESS;
}


Component

         类似于include方法,不算是自定义标签

         用于使用自定义组件,在使用时需要指定 theme(默认为xhtml),templateDir(指定自定义组件的主题目录,如果不指定默认使用系统的主题目录,即template目录) template(自定义组件使用的模板),此外还可使用param传入额外的参数,如果希望在模板中使用参数,总是采用如下形式: $parameters[‘parametername’],实例如下:

 

使用自定义主题,自定义主题目录<br>
从Web应用根路径下加载模板,使用ftl模板。
<s:component
        theme="simple"
       templateDir="customTemplateDir"
       template="ftlCustomTemplate">
<s:param name="list" value="{'Spring2.0' , 'J2EE' ,'Ajax'}" />
</s:component>

使用默认主题(xhtml),默认主题目录(template)<br>
从Web应用中加载模板,使用JSP模板。   
<s:component template="mytemplate.jsp">
       <s:param name="list" value="{'Spring2.0' , 'J2EE' ,'Ajax'}" />
</s:component>

上面使用了FreeMarker和JSP模板,FreeMarker模板的ftlCustomTemplate.ftl代码如下:

<div style="background-color:#bbbbbb;">
FreeMarker自定义模板<br>
请选择您喜欢的图书<br>
<@s.select list="parameters.list"/>
</div>

 

JSP模板jspCustomTemplate.jsp的代码如下:

<%@ page contentType="text/html; charset=GBK"language="java"%>
<%@taglib prefix="s"uri="/struts-tags" %>
<div style="background-color:#eeeeee;">
<b>JSP自定义模板<br>
请选择您喜欢的图书<br></b>
<s:select list="parameters.list"/>
</div>


一些实例

<s:action name="gotoList"可包含namespace 与struts.xml中相同
  国际化:<s:label label="应用类型" key="currentApp.type" name="currentApp.type"></s:label>
<s:hidden name="paraType%{#stat.count}">: 实现迭代不同的行name不同
   在双层迭代中,第一层的var是 result, 在第二层中<s:property value="#result.name"> 要加井号
 	 <s:iterator id="item" value="items" status="st">
		<s:if test="#st.odd">一种颜色
		<s:else>立一种
		<s:property value="name" /> 代表 item.name属性
  	</s:iterator>  
在button中使用interator的迭代值<button οnclick="executeMethod('invokeBeanMethod.action','${methodStatus.count}');">
<s:set var="isSave" value="false" />   <s:if test="#isSave==true">


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值