Struts2标签库

来源:互联网 发布:生活用品的淘宝店名 编辑:程序博客网 时间:2024/06/16 12:16

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 数据类型 描述 cssClass simple String 定义html class属性 cssStyle simple String 定义html style属性 title simple String 定义html title属性 disabled simple String 定义html disabled属性 label xhtml String 定义表单元素的label labelPosition xhtml String 定义表单元素的label位置(top/left),缺省为left requiredpdsition xhtml String 定义required标识相对label元素的位置(left/right),缺省为right name simple String 表单元素的name映射 required xhtml Boolean 在label中添加*(true增加,否则不增加) tabIndex simple String 定义html tabIndex属性 value simple Object 定义表单元素的value

2.1 form标签

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

属性 必填 缺省值 数据类型 描述 onsubmit 否 Object/String html onsubmit属性 action 否 current action Object/String 设置提交的action名字,不需要.action后缀 target 否 Object/String html表单target属性 enctype 否 Object/String html表单enctype属性 method 否 Object/String html表单method属性 namespace 否 current namespace Object/String 所提交action的命名空间 validate 否 false Boolean 是否执行客户端、远程校验,使用xhtml/ajax或继承它们的theme时有效 portletMode 否 Object/String 表单提交后显示的portlet模式 windowState 否 Object/String 表单提交后要显示的window的state openTemplate 否 Object/String 用来输出html开始部分的模板 theme 否 Object/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标签呈现为一个不可见字段
  属性

属性 必填 缺省值 数据类型 描述 maxlength 否 Integer html maxlength属性 maxLength 否 Object/String 不建议使用,一般使用maxlength readonly 否 false Boolean 设置为只读,不允许输入 size 否 Integer html 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" …/>

  属性

属性 必填 缺省值 数据类型 描述 action 否 String 设置action属性 method 否 String 设置method属性 align 否 String html的align属性 type 否 input String submit的类型,有效值为input,button,image

2.4 reset标签

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

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

  属性

属性 必填 缺省值 数据类型 描述 action 否 String 设置action属性 method 否 String 设置method属性 align 否 String html的align属性 type 否 input String 按钮使用的类型,有效值为input,button,image

2.5 textarea标签

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

属性 必填 缺省值 数据类型 描述 cols 否 Integer html cols属性 readonly 否 false Boolean 设置为只读,不允许输入 rows 否 Integer html rows属性

2.6 checkboxlist标签

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

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

  集合为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 标签。
  属性

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

  设置默认选中
  方式一:通过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元素。
  属性

属性 必填 缺省值 数据类型 描述 list 是 Object/String 创建列表可迭代数据源,如果该列表是一个Map(key,value),那么Map的主键将作为选项(<option>)的value属性,而该主键对应的值作为选项的文本内容。 emptyOption 否 false Boolean 是否在题头选项后面加一个空的(–)选项 headerKey 否 Object/String 设置列表的题头主键值,一定不能为空值!”-1”或”’’”是正确的取值,””是错误的取值。 headerValue 否 Object/String 列表的题头选项值 multiple 否 Object/String 创建一个多选列表,如果value属性指定了一个数组(正确的元素类型),那么将预先选中数组中指定的多个选项。 size 否 Integer 该组件列表框的大小 listKey 否 Object/String 列表数据源中元素对象的属性,用于获取选项值 listValue 否 Object/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”/>的值=” “。