Struts2标签库

MVC框架及Struts2介绍
Struts2核心
Struts2拦截器
Struts2值栈和OGNL表达式
Struts2标签库

1 常用标签

  在普通的html标签中可以嵌套struts2标签,但struts2标签不能互相嵌套。使用标签时需要导入标签库:

<%@ taglib prefix="s" uri="/struts-tags" %> 
1.1 debug标签
<s:debug />

  通常用于调试,可以显示当前值栈中的数据。

1.2 <s:property>标签

  <s:property>标签用于输出指定值。

<s:property value="name" default="default value" />

  value:需要输出的属性值,如果没有指定该属性,默认输出ValueStack栈顶的值,对象栈中使用”属性名”,ContextMap中使用”#key”;
  default:如果需要输出的属性值为null,则显示该属性指定的默认值;
  escape:表示不管;
  escapeHtml:默认值为true,表示不管html;
  escapeJavaScript:默认值为false,表示要解析js;

1.3 <s:a>标签

  <s:a>为超链接,使用action属性,如果项目有contextPath的时候,会自动加上。

<!-- 有contextPath情况下根据id删除 -->
<a href="${pageContext.request.contextPath}/tag_delete?userId=${userId}">普通超链接删除</a>
<s:a action="tag_delete?userId=%{#userId}/>">struts超链接</s:a>

  使用%{…}把普通字符串转换为OGNL表达式。

1.4 <s:iterator>标签

  <s:iterator>类似于jstl中的foreach标签,用于对集合List、set和数组遍历。

<s:iterator value="#List" var="e" />

  value:被迭代的集合或数组,如果没有设置该属性,则使用ValueStack栈顶的集合;
  var:引用变量的名称;
  status:该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
     int getCount(),返回当前迭代了几个元素;
     int getIndex(),返回当前迭代元素的索引;
     boolean isEven(),返回当前被迭代元素的索引是否是偶数;
     boolean isOdd(),返回当前被迭代元素的索引是否是奇数;
     boolean isFirst(),返回当前被迭代元素是否是第一个元素;
     boolean isLast(),返回当前被迭代元素是否是最后一个元素。

  迭代userList集合

<table>
    <tr>
        <th>Id</th>
        <th>Name</th>
    </tr>
    <s:iterator value="#userList" var="user">
        <tr>
            <td><s:property value="id" /></td>
            <td><s:property value="name" /></td>
        </tr>
    </s:iterator>
</table>

  value=”id”,可以直接使用user中的属性名获取值(推荐),每次循环都会把对象压栈,循环完成后弹栈,所以可以直接用属性名。

<td><s:property value="#user.id" /></td>
<td><s:property value="#user.name" /></td>

  value=”#user.id”,可以通过#对象.属性名获取值,每次循环都要把user放入值栈的map中所以要加#。

<td>${id}</td>
<td>${name}</td>

  ${id},直接使用EL表达式获取值,但如果作用域中有重名就会出现问题。

1.5 if/else if/else

  if/else if/else用于基本的流程控制,if标签可单独使用也可以和else if标签、一个或多个else一起使用。

<table>  
    <s:iterator value="allList" var="person">
        <tr>
            <td><s:property value="#person.name"/></td>
            <td><s:property value="#person.age"/></td>
            <td>
                <s:if test="#person.age<24">少年</s:if>
                <s:elseif test="#person.age<26">中年</s:elseif>
                <s:else>老年</s:else>
            </td>
        </tr>
    </s:iterator>  
</table>
1.6 <s:url>标签

  <s:url>标签用于创建url,可以通过”param”标签提供request参数。
  value:如果不提供就用当前action,使用value后缀必须加.action;
  action:用来生成url的action,如果没有则使用value;
  namespace:命名空间;
  var:引用变量的名称。

<!-- 使用action -->
<s:url action="ognlTagAction_test" namespace="/ognl" var="myurl">
    <s:param name="name" value="%{'张老师'}"></s:param>
    <s:param name="id" value="12"></s:param>
</s:url>
<s:a href="%{#myurl}">xxxx</s:a>
<!-- 使用value -->
<s:url value="ognlTagAction_test.action" namespace="/ognl" var="myurl">
    <s:param name="id" value="12"></s:param>
    <s:param name="cnname" value="%{'zhang'}"></s:param>
</s:url>
<s:a href="%{#myurl}">xxxx</s:a>

  当使用url时,应配合使用struts2的a标签。

2 表单标签

  表单标签将在HTML文档里被呈现为一个表单元素,表单标签的优点:
  1.表单回显;
  2.对页面进行布局和排版(不用);
  标签的属性可以被赋值为一个静态的值或一个OGNL表达式。如果在赋值时使用了一个OGNL表达式并把它用%{}括起来,这个表达式将会被求值。
  %{}表示把OGNL表达式转换成字符串,或者把字符串转换成OGNL表达式。
  struts2表单标签的value属性,必须用%{}进行设值。

  表单标签公共属性

属性Theme数据类型描述
cssClasssimpleString定义html class属性
cssStylesimpleString定义html style属性
titlesimpleString定义html title属性
disabledsimpleString定义html disabled属性
labelxhtmlString定义表单元素的label
labelPositionxhtmlString定义表单元素的label位置(top/left),缺省为left
requiredpdsitionxhtmlString定义required标识相对label元素的位置(left/right),缺省为right
namesimpleString表单元素的name映射
requiredxhtmlBoolean在label中添加*(true增加,否则不增加)
tabIndexsimpleString定义html tabIndex属性
valuesimpleObject定义表单元素的value
2.1 form标签

  作用:用来呈现html语言中的表单元素
  属性

属性必填缺省值数据类型描述
onsubmitObject/Stringhtml onsubmit属性
actioncurrent actionObject/String设置提交的action名字,不需要.action后缀
targetObject/Stringhtml表单target属性
enctypeObject/Stringhtml表单enctype属性
methodObject/Stringhtml表单method属性
namespacecurrent namespaceObject/String所提交action的命名空间
validatefalseBoolean是否执行客户端、远程校验,使用xhtml/ajax或继承它们的theme时有效
portletModeObject/String表单提交后显示的portlet模式
windowStateObject/String表单提交后要显示的window的state
openTemplateObject/String用来输出html开始部分的模板
themeObject/String输出元素时使用的主题(theme)

  默认情况下form标签将被呈现为一个表格形式的HTML表单,嵌套在form标签里的输入字段将被呈现为一个表格行。每个表格行由两个字段组成,一个对应着行标,一个对应着输入元素。提交按钮将被呈现为一个横跨两列单元格的行。

  去掉form中的默认样式:
  方式一:struts.xml中使用常量去掉所有form的样式

<constant name="struts.ui.theme" value="simple"></constant>\

  方式二:form中配置去掉某一个form的样式

<s:form action="#" method="post" theme="simple">
2.2 textfield、password、hidden标签

  textfield标签呈现为一个输入文本字段
  password标签呈现为一个口令字段
  hidden标签呈现为一个不可见字段
  属性

属性必填缺省值数据类型描述
maxlengthIntegerhtml maxlength属性
maxLengthObject/String不建议使用,一般使用maxlength
readonlyfalseBoolean设置为只读,不允许输入
sizeIntegerhtml size属性

  password标签扩展自textfield标签,多了showPassword属性,该属性是布尔型,默认值为false,它决定着在表单回显时是否显示输入的密码,true表示显示密码。

用户名:<s:textfield name="user.name"></s:textfield>
密码:<s:password name="user.password" showPassword="true"></s:password>
2.3 submit标签

  submit标签将呈现为一个提交按钮,根据其type属性的值,可以提供3种呈现效果:

input: <input type="submit" value="提交" …/>
button: <input type="button" value="确定" …/>
image: <input type="image" value="图片" src="XX.jpg" …/>

  属性

属性必填缺省值数据类型描述
actionString设置action属性
methodString设置method属性
alignStringhtml的align属性
typeinputStringsubmit的类型,有效值为input,button,image
2.4 reset标签

  reset标签将呈现为一个重置按钮,根据其type属性的值,可以提供2种呈现效果:

input: <input type="reset" value="重置" …/>
button: <input type="button" value="重置按键" …/>

  属性

属性必填缺省值数据类型描述
actionString设置action属性
methodString设置method属性
alignStringhtml的align属性
typeinputString按钮使用的类型,有效值为input,button,image
2.5 textarea标签

  textarea标签将呈现为一个HTML文本域元素。
  属性

属性必填缺省值数据类型描述
colsIntegerhtml cols属性
readonlyfalseBoolean设置为只读,不允许输入
rowsIntegerhtml rows属性
2.6 checkboxlist标签

  checkboxlist标签将呈现一组多选框。
  属性

属性必填缺省值数据类型描述
list   Object/String设置用来迭代的值,如果list是一个Map(key,value),Map的key会成为选项的value的参数,Map的value会成为选项的内容。
listKeyObject/Stringlist内含对象用来获取字段的value属性
listValueObject/Stringlist内含对象用来获取字段的内容属性

  集合为List

<s:checkboxlist name="list" list="{'Java','.Net','RoR','PHP'}"  value="{'Java','.Net'}" />
<!-- 生成的html代码 -->
<input type="checkbox" name="list" value="Java" checked="checked" /><label>Java</label>
<input type="checkbox" name="list" value=".Net" checked="checked" /><label>.Net</label>
<input type="checkbox" name="list" value="RoR" /><label>RoR</label>
<input type="checkbox" name="list" value="PHP" /><label>PHP</label>

  集合为Map

<s:checkboxlist name="map" list="#{1:'Java',2:'.Net',3:'RoR',4:'PHP'}" listKey="key" listValue="value" value="{1,2,3}" />
<!-- 生成的html代码 -->
<input type="checkbox" name="map" value="1" checked="checked" /><label>Java</label>
<input type="checkbox" name="map" value="2" checked="checked" /><label>.Net</label>
<input type="checkbox" name="map" value="3" checked="checked"/><label>RoR</label>
<input type="checkbox" name="map" value="4" /><label>PHP</label>

  集合中存放着JavaBean

<% 
    Person person1 = new Person(1,"第一个");
    Person person2 = new Person(2,"第二个");
    List<Person> list = new ArrayList<Person>();
    list.add(person1);
    list.add(person2);
    request.setAttribute("persons", list);  
%>
<!-- id和name为Person的属性 -->
<s:checkboxlist name="beans" list="#request.persons" listKey="id" listValue="name" />
<!-- 生成的html代码 -->
<input type="checkbox" name="beans" value="1" /><label>第一个</label>
<input type="checkbox" name="beans" value="2" /><label>第二个</label>
2.7 radio标签

  标签将呈现为一组单选按钮, 单选按钮的个数与通过该标签的list属性提供的选项的个数相同。使用 radio 标签实现 “多选一”, 对于 “真/假” 则该使用 checkbox 标签。
  属性

属性必填缺省值数据类型描述
listObject/String设置用来迭代的值,如果list是一个Map(key,value),Map的key会成为选项的value的参数,Map的value会成为选项的内容。
listKeyObject/Stringlist内含对象用来获取字段的value属性
listValueObject/Stringlist内含对象用来获取字段的内容属性

  设置默认选中
  方式一:通过js代码实现

<script type="text/javascript">
        document.getElementsByName('user.sex')[0].checked=true;
</script>

  方式二:通过添加value属性

<s:radio name="user.sex" list="%{#{'1':'男','0':'女'}}" value="1" theme="simple" />
如果默认选中,回显就无法起作用。

  集合为List

<s:radio name="list" list="{'Java','.Net'}" value="'Java'"/>
<!-- 生成如下html代码 -->
<input type="radio" name="list" checked="checked" value="Java"/><label>Java</label>
<input type="radio" name="list" value=".Net"/><label>.Net</label>

  集合为Map

<s:radio name="map" list="#{1:'Java',2:'.Net',3:'RoR',4:'PHP'}" listKey="key" listValue="value“ value="1"/>
<!-- 生成如下html代码 -->
<input type="radio" name="map" id="map1" value="1"/><label for="map1">Java</label>
<input type="radio" name="map" id="map2" value="2"/><label for="map2">.Net</label>
<input type="radio" name="map" id="map3" value="3"/><label for="map3">RoR</label>
<input type="radio" name="map" id="map4" value="4"/><label for="map4">PHP</label>

  集合中存放着JavaBean

<% 
    Person person1 = new Person(1,"第一个");
    Person person2 = new Person(2,"第二个");
    List<Person> list = new ArrayList<Person>();
    list.add(person1);
    list.add(person2);
    request.setAttribute("persons", list);  
%>
<s:radio name="beans" list="#request.persons" listKey="personid" listValue="name"/>
<!-- 生成如下html代码 -->
<input type="radio" name="beans" id="beans1" value="1"/><label>第一个</label>
<input type="radio" name="beans" id="beans2" value="2"/><label>第二个</label>
2.8 select标签

  标签将呈现一个select元素。
  属性

属性必填缺省值数据类型描述
listObject/String创建列表可迭代数据源,如果该列表是一个Map(key,value),那么Map的主键将作为选项(<option>)的value属性,而该主键对应的值作为选项的文本内容。
emptyOptionfalseBoolean是否在题头选项后面加一个空的(–)选项
headerKeyObject/String设置列表的题头主键值,一定不能为空值!”-1”或”’’”是正确的取值,””是错误的取值。
headerValueObject/String列表的题头选项值
multipleObject/String创建一个多选列表,如果value属性指定了一个数组(正确的元素类型),那么将预先选中数组中指定的多个选项。
sizeInteger该组件列表框的大小
listKeyObject/String列表数据源中元素对象的属性,用于获取选项值
listValueObject/String列表数据源中元素对象的属性,用于获取选项内容

  集合为List

<s:select name="list" list="{'Java','.Net'}" value="'Java'"/>
<!-- 生成如下html代码 -->
<select name="list" id="list">
    <option value="Java" selected="selected">Java</option>
    <option value=".Net">.Net</option>
</select>

  集合为Map

<s:select name="map" list="#{1:'Java',2:'.Net',3:'RoR',4:'PHP'}" listKey="key" listValue="value" value="1"/>
<!-- 生成如下html代码 -->
<select name="map" id="map">
    <option value="1" selected="selected">Java</option>
    <option value="2">.Net</option>
    <option value="3">RoR</option>
    <option value="4">PHP车</option>
</select>

  集合中存放着JavaBean

<!-- 
    listKey传递到后台的值
    listValue界面上显示的内容
    headerKey默认的值
    headerValue默认显示内容
-->
<s:select name="beans" list="#request.persons" listKey="personid" listValue="name" headerKey="-1" headerValue="--请选择--"/>
<!-- 生成如下html代码 -->
<select name="beans" id="beans">
    <option value="-1" selected="selected">--请选择--</option>
    <option value="1">第一个</option>
    <option value="2">第二个</option>
</select>

3 Struts2自动回显

<s:form name="form1" action="userAction_save">
    用户名:<s:textfield name="username"/><br>
    电话:<s:textfield name="tel" /><br>
    描述:<s:textfield name="des" /><br>
    <s:submit type="submit" value="保存"></s:submit>
</s:form>

  <s:textfield name=”username”/>相当于<input type=”text” name=”username” value=”zhang”>。
  当struts2解析该标签时,获取name属性的值username,以username为条件到对象栈中查找PropertyName=”username”的属性,如果找到了,获取该属性的值,该属性的值就是的值,如果没有找到了<s:textfield name=”username”/>的值=” “。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值