表单标签
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">