Struts 2 标签库
<s:if>标签
拥有一个test属性,其表达式的值用来决定标签里内容是否显示
<s:if test="#request.username=='clf'">欢迎clf</s:if> <s:elseif test="#request.username=='yqy'>欢迎yqy</s:elseif> <s:else>请登录</s:else><s: iterator>标签
用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象,value属性表示集合或枚举对象,status属性表示当前循环的对象,在循环体内部可以引用该对象的属性
<s:iterator value="userList" status="user"> 姓名:<s:property value="user.userName" /> 年龄:<s:property value="user.age" /> </s:iterator> <s:debug></s:debug> <s:iterator value="#request.strs" var="strs"> <s:property value="#strs"/> </s:iterator> <s:debug></s:debug><s:textfield>
文本框标签,可填写文本内容,同时该标签含有很多有用的属性:
readonly 只读属性
disabled 可用/不可用属性,如果设置为不可用在提交表单的时候该文本框的值不会传到后台
cssClass 指定css的class
cssStyle 自定义css样式
maxlength 文本框可输入的文字个数
tooltip 冒泡提示<s:form action="register" method="post"> <s:textfield name="username" label="用户名"></s:textfield> </s:form><s:password>
与<s:textfield>类似
<s:textarea>
与<s:textfield>类似
其核心属性cols和rows分别指定文本域的宽度和高度<s:file>标签
与<s:textfield>类似
<s:submit>标签
生成提交按钮
<s:reset>标签
生成重置按钮
<s:radio>标签
<s:radio name="sex" list="#{'male':'男','female':'女'}" value="male" label="性别" tooltip="选择性别">使用value指定默认值
radio标签的list属性必须是Map类型,key为实际值,value为显示值,如果为List类型会抛出异常<s:checkbox>标签
<s:checkbox name="checkName" value="true" fieldValue="Y"/>struts2的checkbox标签在使用的时候需要注意它的两个属性。value和fieldValue,在其他的标签中value是真实值。而在checkbox中,value如果为true,就表示复选框被选中;如果为false就表示不被选中。fieldValue才是此复选框对应的真实的值。
<s: checkboxlist>标签
拥有list、listKey、listValue属性,参照<s:select>标签的注解
<s:checkbox list name="interest" list="{'足球','篮球','排球','游泳'}" label="兴趣爱好"/>需要用复选框时,如果对应的属性为Boolean类型时用checkbox标签,如果为集合类或者数组类则用checkboxlist标签
<s: combobox>标签
此标签用于生成一个组合框,即可选择,也可编辑,就是一个编辑框加一个下拉框
<s:combobox list="#request.list2" name="fruit" label="最喜爱的水果"/><s:select>标签
输出一个下拉列表框,相当于HTML代码中的<select/>
常用属性如下:
list:必需,可以为Cellection、Map、Enumeration、Iterator、array类型,指定要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容
listKey:指定集合对象中的哪个属性作为选项的value
listValue:指定集合对象中的哪个属性作为选项的内容
headerKey:设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值,headerKey指定缺省的选项"value",headerValue指定缺省的选项"text"
headerValue:显示在页面中header选项内容
emptyOption:是否在header选项后面添加一个空选项
multiple:是否多选
size:显示的选项个数
示例如下<s:select list="{'aa','bb','cc'}" headerKey="00" headerValue="00"></s:select> <s:select list="#{1:'aa',2:'bb',3:'cc'}" label="abc" listKey="key" listValue="value" headerKey="0" headerValue="aabb"> <% java.util.HashMap map = new java.util.LinkedHashMap(); map.put(1,"aaa"); map.put(2,"bbb"); map.put(3,"ccc"); request.setAttribute("map",map); request.setAttribute("aa","2"); %> <s:select list="#request.map" label="abc" listKey="key" listValue="value" value="#request.aa" headerKey="0" headerValue="aabb"></ s:select><s:doubleselect>标签
输出关联的两个HTML列表框,产生联动效果
list、listKey、listValue、headerKey、headerValue、emptyOption、multiple、size属性与<s:select>标签一样,作用域第一个下拉框
doubleId:指定第二个列表框的ID
doubleList:指定第二个下拉框要迭代的集合
doubleListKey:指定集合对象中的哪个属性作为选项的value,该选项只对第二个列表框起作用
doubleListValue:指定集合对象中的哪个属性作为选项的内容,该选项只对第二个列表框起作用
doubleSize:选项个数
doubleName:指定第二个列表框的name映射
doubleValue:第二个列表框的初始选项
注意,list属性必须为结合类型或者数组类型,而doublelist属性必须为Map类型//城市对象 public class CityBean { private int cityid; private String cityname; //省略了setter、getter方法 } //区域对象 public class AreaBean { private int areaid; private String areaname; private int cityid; //省略了setter、getter方法 } public class CityAction extends ActionSupport { //map映射cityid--区域列表 private Map<Integer, List<AreaBean>> areaMap = new HashMap<Integer, List<AreaBean>>(); //list装所有city集合 private List<CityBean> cityBeans = new ArrayList<CityBean>(); public Map<Integer, List<AreaBean>> getAreaMap() { return areaMap; } public void setAreaMap(Map<Integer, List<AreaBean>> areaMap) { this.areaMap = areaMap; } public List<CityBean> getCityBeans() { return cityBeans; } public void setCityBeans(List<CityBean> cityBeans) { this.cityBeans = cityBeans; }<!-- areaMap[top.cityid]: top是指前一个下拉框整个的选中项cityBean, cityid就是指cityBean中cityid 所以areaMap[top.cityid]指map集合中第一个下拉框选中的id对应的list集合 list里面每个元素放的是AreaBean --> <s:doubleselect tooltip="选择城市操作" label="请选择城市" name="city" list="cityBeans" listKey="cityid" listValue="cityname" doubleList="areaMap[top.cityid]" doubleName="area" doubleListKey="areaid" doubleListValue="areaname" />让它们一行显示,比较简单的做法是:
定义样式:<style type="text/css"> .doubleselect br{ display: none; } < /style>< div class="doubleselect">把<s:form>的代码放进来</div><s:date>标签
用以输出一个格式化的日期对象,name表示要输出的对象,format表示输出的日期格式
<s:date name="user.birthday" format="dd/MM/yyyy" /> <s:date name="user.birthday" format="%{getText('some.i18n.key')}" /> <s:date name="user.birthday" />--默认格式<s:append>标签
用于将多个枚举值对象进行叠加,形成一个新的枚举值列表
如将3个列表对象进行了组合,形成新的列表对象:<s:append var="newIteratorList"> <s:param value="%{myList1}" /> <s:param value="%{myList2}" /> <s:param value="%{myList3}" /> </s:append><s:generator>标签
下面的代码将分隔为3个字符串,然后循环输出
<s:generator val="%{'aaa,bbb,ccc'}"> <s:iterator> <s:property /> </s:iterator> </s:generator><s:merge>标签
用于将多个枚举值按照数组的索引位置进行合并
<s:merge var="newMergeList"> <s:param value="%{mylist1}">--设mylist1列表中有a,b,c三个元素 <s:param value="%{mylist2}">--设mylist2列表中有1,2,3三个元素 </s:merge>合并后新的列表的元素及其顺序为:a,1,b,2,c,3
<s:sort>标签
用于对一组枚举值进行排序,属性comparator指向一个继承自java.util.Comparator的比较器,该比较器可以是对应Action页面中的一个比较器变量,source指定要排序的列表对象
<s:bean id="myComparator" name="com.clf.MyComparator"></s:bean> <s:sort comparator="myComparator" source="budget.approve"> <s:iterator value="budget.approve" status="st"> </s:iterator> </s:sort>import java.util.Comparator; public class MyComparator implements Comparator<Object> { public int compare(Object arg0, Object arg1) { System.out.println(arg0.toString().compareTo(arg1.toString())); //默认从小到大排列 return arg0.toString().compareTo(arg1.toString()); //从大到小排列 //return -(arg0.toString().compareTo(arg1.toString())); } }<s:subset>标签
subset标签用于取得集合的子集,该标签的底层通过org.apache.Struts2.util.Subset.IteratorFilter类提供实现。使用subset标签可以指定如下几个属性:
count:可选属性,指定子集中元素的个数,默认取得源集合的所有元素
source:可选属性,指定源集合,如果不指定,默认取得valueStack栈顶的集合,一般都会指定
start:可选属性,指定从源集合的第几个元素开始截取,默认从第一个元素(即start=0)开始
decider:可选属性,由开发者自己决定是否选中该元素<!--截取从下标1开始的三个元素--> <s:subset source="{'Java','Spring2.0','J2EE','Ajax','WebWork'}" start="1" count="3"> </s:subset>此外,Struts2还允许开发者决定截取标准,开发者只需要实现一个Decider类,实现SubsetIteratorFilter.Decider接口中的boolean decide(Object element)方法,如果该方法返回真,则表明该元素将被选入子集中。看如下代码:
import org.apache.struts2.util.SubsetIteratorFilter; public class MyDecider implements SubsetIteratorFilter.Decider { public boolean decide(Object element) throws Exception { String str = (String)element; return str.indexOf("J2EE") > 0; } }<!--截取包含"J2EE"的所有元素--> <s:subset source="{'Java','Spring2.0','J2EE','Ajax','WebWork'}" decider="#mydecider"> </s:subset><s:a>标签
用于创建一个<a>标签,errorText用于显示错误信息,preInvokeJS表示该链接执行时的javascript提示函数,href表示跳转地址.
<s:a errorText="删除错误" preInvokeJS="confirm('确认删除?')" href="test.jsp"> <img src="/image/delete.gif" /> </s:a>带参数的链接
<s:iterator value="#request.userList"> <tr align="center"> <td><s:property value="id"/> : <s:property value="username"/></td> <td><s:property value="age"/></td> <td><s:property value="sex"/></td> <td><s:property value="address"/></td> <td> <s:a href="userAction!addUser.action">添加</s:a> | //第一种方式,在标签内使用标签时用% <s:a href="userAction!loadUser.action?user.id=%{id}">编辑</s:a> | //第二种方式:使用<s:url>标签解决 <s:url id="idUrl" action="userAction!delUser.action"> <s:param name="user.id" value="%{id}"></s:param> </s:url> <s:a href="%{idUrl}">删除</s:a> //第三种:直接加入 <a href="<s:url action="userAction!delUser.action"> <s:param name="user.id" value="id"/> </s:url>">删除2 </a> </td> </tr> </s:iterator><s:url>标签
<s:url>生成一个url地址,可以通过url标签制定的<s:param>子元素向URL地址发送请求参数
<s:url action=""> --指定请求地址 <s:param name="" value=""></s:param> --指定参数 </s:url>属性includeParams:该属性有三个值:none、get、 all,默认值为get
当该属性值为get时,该url会将访问其所在jsp的的请求的所有get方法的参数添加到自身来
当它的属性值为all时,更是将get和post的的参数值全部添加到自身来
当includeParams的值是all或get,param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值<s:action>标签
使用action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中. 使用action标签指定属性有:
id: 可选属性,作为该Action的引用ID<s:action name="actionName" executeResult="true" namespace="/"> <s:param name="currentPage" value="传递的值"></s:param> </s:action> <!-- <s:param ></s:param>是以request.setAttribute方式的值的,而不是以参数传值 -->name:必选属性,指定调用Action
namespace:可选属性,指定该标签调用Action所属namespace
executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.
ignoreContextParam:可选参数,指定该页面的请求参数是否需要传入调用的Action中,默认值是false,即传入参数.
上例中,以request.getParameter("")会获取不到值
通过request.getAttribute("")方式才可以获取
另外,使用<s:param ></s:param> value指代的是action定义的对象的名称,而不是一个具体的值,和 <s:textfield>中的name是一个意思,所以要要传递字符串不能把值写value中而应该写到
<s:param >写到这里</s:param><s:param >标签
param标签用来把一个参数传递给包含着它的那个标签。
不管在给出value属性值时有没有使用"%{"和"}",Struts都会对它进行求值。就是说value指代的是action定义的对象、属性的名称,而不是一个具体的值
例如,下面这个param标签的值是userName动作属性:<s:param name="userName" value="userName"/>它与下面这个标签是等价的:
<s:param name="userName" value="%{userName}"/>如果想传递一个String类型的字符串作为参数值,必须把它用单引号括起来。例如,下面这个param标签的值是字符串"clf"
<s:param name="userName" value="'clf'"/>该值会以java.lang.Object的格式放入statck
等价于<s:param name="userName">clf</s:param>参数会以String的格式放入statck
这种写法还可以使用一个EL表达式,例如,下面代码将把当前主机名传递给host参数:
而下面这样的写法就不行了:<s:param name="host" value="${header.host}"/> <!-- 无效的。--><s:bean>标签
用于创建一个JavaBean对象,name表示JavaBean类全名,var表示变量的实例名,并可以包含<s:param>设置实例化输入参数
public class Test1 { private String str; public String getStr() { return str; } public void setStr(String str) { this.str = str; } public String hello() { return "Hello World!"; } public String hello(String name) { return "Hello," + name; } }然后就可以使用这个bean了:
<s:bean name="test.Test1" id="mybean"> <s:param name="str" value="'abc'"></s:param> </s:bean> <s:property value="#mybean.str"/><br/> <s:property value="#mybean.hello()"/><br/> <s:property value="#mybean.hello('tom')"/><s:property>标签
1,访问Action值栈中的普通属性:
<s:property value="attrName"/>2,访问Action值栈中的对象属性(要有getter、 setter方法):
<s:property value="obj.attrName"/> <s:property value="obj1.obj2.attrName"/>3,访问值栈中对象属性的方法
<s:property value="obj.methodName()"/>4,访问值栈中action的普通方法:
<s:property value="methodName()"/>5,访问静态方法:
<s:property value="@com.softeem.LoginAction@methodName()"/>6,访问静态属性:
配置属性文件,允许ognl访问静态方法struts.ognl.allow...=true<s:property value="@com.softeem.LoginAction@attrName"/>7,访问Math类的静态方法:
<s:property value="@@min(9,7)"/>8,访问普通类的构造方法:
<s:property value="new com.softeem.User(2)"/>9,访问集合:
①list集合对象<s:property value="listName"/>②list集合中的某个元素
<s:property value="listName[1]"/>③list中某个属性的集合
<s:property value="listName.{field}"/>④list中某个属性集合的特定值
<s:property value="listName.{field}[0]"/>⑤访问set
<s:property value="setName"/>⑥访问set中某个元素
<s:property value="setName[0]"/>⑦访问map
<s:property value="mapName"/>⑧根据key访问Map中的元素
<s:property value="mapName.username"/> <s:property value="mapName['username']"/> <s:property value="mapName[/"username/"]"/>⑨访问map中所有的key
<s:property value="mapName.keys"/>10,访问map中所有的values
<s:property value="mapName.values"/>11,访问map的大小
<s:property value="mapName.size()"/>12,投影
<s:property value="listName.{?#this.age==1}"/> <s:propertyvalue="listName.{^#this.age>1}"/> <s:propertyvalue="listName.{$#this.age==1}"/> <s:propertyvalue="listName.{$#this.age==1}.{age}==null"/> <s:propertyvalue="[0]"/>值栈中的对象<s:i18n>与<s:text>标签
<s:i18n>加载资源包到值堆栈。它可以允许<s:text>访问任何资源包的信息,而不只当前action相关联的资源包
用<s:text>标签来访问国际化信息,只需要在它的name属性上填入需要的key即可<s:i18n name="xxx.xxx.xxx.ApplilcationMessages"> <s:text name="HelloWord" /> </s:i18n><s:debug>标签
用以输出页面的值栈调试信息,通常在进行程序调用时使用,便于查找JSP页面中的错误
它提供的是Struts ValueStack Debug ..也就是说,都是struts2的值栈(就是各个值的信息).
这个值栈又分为两种.Value Stack Contents 和 Stack Context .
(1).Value Stack Contents 里面的信息我们可以用 <s:property value="sss"> 这样来直接访问.
(2) Stack Context 里面的信息我们可以 <s:property value="#sss">这样来访问<s:include>标签
用来包含一个Servlet的输出(Servlet或JSP页面),使用value属性指定包含页名称,可以使用<s:param>传递参数给子页
<s:include value="/test.jsp"> <s:param name="username">clf</s:param> </s:include><s:push>标签
用以加入一个值到值栈中
user为一个JavaBean对象,里面包含name和age属性<s:push value="user"> <s:property value="name" /> <s:property value="age" /> </s:push><s:set>标签
赋予变量一个特定范围内的值
name: 必填,重新生成的新变量的名字
scope: 可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。如果没有指定,默认是放置在Stack Context中。
value: 可选,指定将赋给变量的值。如果没指定,则将ValueStack栈顶的值赋给新变量。
var: 可选,指定该元素的引用ID,如果指定了将会将该值放在ValueStack中
将Stack Context中的p值放入默认范围内。<s:set value="#p" name="xxx"/> <s:property value="#xxx.name"/>将Stack Context中的p值放入application范围内
<s:set value="#p" name="xxx" scope="application"/> <s:property value="#attr.xxx.name"/>将Stack Context中的p值放入session范围内
<s:set value="#p" name="xxx" scope="session"/> <!--使用JSP2.0表达式语言直接访问session中的属性--> ${sessionScope.xxx.name}<s:fielderror>标签
显示数据校验错误信息
在action中使用
this.addFieldError("错误信息");
然后错误信息会在JSP页面的
<s: fielderror/>说在的地方显示出来<s:actionerror>标签
显示Action中的错误信息
Action中的对应方法
this.addActionError("错误信息");<s:actionmessage>标签
显示Action中的消息
Action中的对应方法this.addActionMessage("消息");
Struts 2 标签库的更多相关文章
- struts的标签库出现Failed to load or instantiate TagExtraInfo class
使用struts的标签库出现Failed to load or instantiate TagExtraInfo class 最近在使用struts标签库的时候,在eclipse开发环境中是正常的,放 ...
- 菜鸟学习Struts——bean标签库
一.Struts标签库. Struts实际上包含了4个标签库:bean,logic,html,tiles bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息 logic:替代JSTL ...
- Struts 2 标签库及使用
1 Struts 2 基本的标签属性. 1) name:指定表单元素的名称,该属性与Action中定义的属性相对应. 2) value:指定表单元素的值. 3) required:指定表单元素的必填 ...
- Struts、JSTL标签库的基本使用方法
一 使用Struts标签之前需要经过下面3个步骤的配置. 1.导入TLD文件. 2.在web.xml中注册标签库. 3.在页面中引入标签库. 下面详细介绍以上步骤. 1 导入TLD文件. TLD文件是 ...
- 【转】Struts1.x系列教程(7):Logic标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 【转】Struts1.x系列教程(4):标签库概述与安装
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- jstl标签库基础教程及其使用代码
概述 在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现.鉴于此,出现了 JSTL ( JSP Sta ...
- Java开源JSP标签库
01displytag 与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮.完善. 02cewolf tag 用来在web上显示复杂图形报表的一个jsp tag. 03Loading T ...
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...
随机推荐
- [HAOI2006]数字序列
题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. 输入输出格式 输入格式: 第一行包含一个数 ...
- clique
[题目描述]数轴上有 n 个点,第 i 个点的坐标为 xi,权值为 wi.两个点 i,j 之间存在一条边当且仅当 abs(xi-xj)>=wi+wj.你需要求出这张图的最大团的点数.(团就是两两 ...
- 数据结构之Treap
1. 概述 同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级.Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质.因而,Treap ...
- angular2+ionic2架构介绍
不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2+typescript 2. 项目结构 3. S ...
- Memcached在Linux环境下的使用详解
一.引言 写有关NoSQL数据库有关的文章已经有一段时间了,可以高兴的说,Redis暂时就算写完了,从安装到数据类型,在到集群,几乎都写到了.如果以后有了心得,再补充吧.然后就 ...
- sql 复习练习
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- ...
- 用tensorlayer导入Slim模型迁移学习
上一篇博客[用tensorflow迁移学习猫狗分类]笔者讲到用tensorlayer的[VGG16模型]迁移学习图像分类,那麽问题来了,tensorlayer没提供的模型怎么办呢?别担心,tensor ...
- Go 语言接口
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口. 实例 /* 定义接口 */ type interface_name in ...
- PHP 5 Array 函数
PHP Array 简介 PHP Array 函数允许您访问并操作数组. 支持简单的数组和多维数组. 安装 PHP Array 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. PHP 5 ...
- 虚拟机克隆,并设置新的ip
6.1克隆新的虚拟机 选中某个虚拟机-à右键à管理à克隆 选择下一步 选择下一步 点击完成 6.2修改主机名 [root@hadoop3 ~]# vim/etc/sysconfig/network 将 ...