这些UI标签都可以指定cssClass,cssStyle来指定CSS样式,而且可以指定大量的onXxx属性,用于绑定JS函数
没有属性指定
<s:head>
查看源代码可以发现在head标签里出现了css和js脚本(如下样式)
<link rel="stylesheet" href="/FormLabel/struts/xhtml/styles.css" type="text/css"/>
<script src="/FormLabel/struts/utils.js" type="text/javascript"></script>
<s:file name="image" label="上传头像">
在各种浏览器中的显示样式不同
label,name,cols,rows
<s:textarea label="备注" name="remark" cols="30" rows="4">
cols和rows只是定义了显示出来的文本域的大小,而不是指定文本域能够输入的字符大小
checkboxlist/radio/select/optgroup非常相似
<%@ taglib prefix= "s" uri="/struts-tags"%>
<!--有一个listXuelis类以及一个Xueli类-->
<s:action var="listXuelis" name="listXuelis"/>
<s:form >
<s:select label="选择学历"
name="select"
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
/>
<s:radio label="选择学历"
name="radio"
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
/>
<s:checkboxlist label="选择学历"
name="checkboxlist"
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
/>
<s:select label="选择学历"
name="select"
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
>
<s:optgroup label="再次选择"
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
/>
</s:select>
</s:form>
<!--所在文件名不能有短划线(-)-->
<s:combobox list="{‘java‘,‘android‘,‘ javaWeb‘,‘J2EE‘,‘J2ME‘,‘J2SE‘}"
name="book"
>
</s:combobox>
使用的过程中,如果单单写
<s:combobox list="{‘java‘,‘android‘,‘ javaWeb‘,‘J2EE‘,‘J2ME‘,‘J2SE‘}" name="book" />
会出现错误,点击下拉的时候上面的文本框不能改变,所以要包含在<s:form></s:form>
中
其次使用的时候,文件名里面不能有短划线(“-”),原因
<s:updownselect label="选择学历"
name="select"
moveDownLabel="向下"
moveUpLabel=""
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
/>
<s:optiontransferselect label="选择学历"
name="select"
moveDownLabel="向下"
list="#listXuelis.xuelis"
listKey="id"
listValue="name"
doubleList="{‘wuxi‘,‘sdag‘,‘‘er}"
doubleName="dsag"
/>
<!--所在的form必须有一个action,该值可以是存在或不存在的action name-->
<s:form action="asg">
<s:doubleselect list="{‘西游记‘,‘水浒传‘}"
doubleList="top==‘西游记‘?{‘sun‘,‘zhu‘,‘tang‘}:{‘lu‘,‘wu‘,‘lin‘}"
doubleName="renwu"
label="选择喜欢的任务"
/>
</s:form>
<s:set var="renwu" value="#{‘西游记‘:{‘sun‘,‘zhu‘,‘tang‘},‘水浒‘:{‘lin‘,‘lu‘},‘三国‘:{‘kong‘,‘liu‘}}">
<s:form action="asg">
<s:doubleselect name="asdg"
list="#renwu.keySet()"
<!--[]获取Map对应的value,top表示上一个list的选择-->
doubleList="#renwu[top]"
doubleName="renwu"
label="选择喜欢的任务"
/>
</s:form>
默认情况下,如果没有进行防刷新控制,每一次刷新都会添加一条完全相同的记录
(1)需要在表单页面上增加s:token
(2)在form对应的Action启用一个拦截器<interceptor-ref name="token"/>,<interceptor-ref name="defaultStack"/>
(默认拦截器)
如果action没有指定拦截器,将使用默认的拦截器,而使用了其他拦截器,则需要显示调用默认拦截器
<interceptor-ref name="token"/>
会检测用户的刷新,当检测到用户刷新页面时,会返回一个invalid.token的逻辑视图名(因此需要result一个物理视图)
(3)为invalid.token配置一个物理视图资源
<!--此处一个简单的表单页,action省略-->
<s:form action="addUserPro">
<s:textfiled name="user.name" label="用户名" />
<s:testfiled name="user.pass" label="密码" />
<s:submit value="添加" />
</s:form>
<s:form action="addUserPro">
<s:textfiled name="user.name" label="用户名" />
<s:testfiled name="user.pass" label="密码" />
<!--s:token没有属性,就是用来做防刷新-->
<s:token />
<s:submit value="添加" />
</s:form>
<table width="400" border="1">
<s: iterator value="users" var="u">
<tr>
<td>${u.id}</td>
<td>${u.name}</td>
<td>${u.pass}</td>
</tr>
</s:iterator>
</table>
当需要把action中的一段文本,传入下一个页面显示时,就可以借助struts2的消息机制
1)Action中可通过addActionError()或addActionMessage()来添加消息
2)接下来可以在下一个页面中使用<s:actionerror>或<s:actionmessage>
输出消息
原文地址:http://blog.csdn.net/havedream_one/article/details/45895883