Struts2标签库经常使用标签

基本概述css

     对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器部分和视图页面部分。Struts2做为一个优秀的MVC框架,也把重点放在了这两部分上。控制器主要由Action来提供支持,而视图则是由大量的标签来提供支持。html

     在JavaWeb中,Struts2标签库是一个比较完善,并且功能强大的标签库,它将全部标签都统一到一个标签库中,从而简化了标签的使用,它还提供主题和模板的支持,极大地简化了视图页面代码的编写,同时它还提供对ajax的支持,大大的丰富了视图的表现效果。与JSTL(JSP Standard Library,JSP 标准标签库)相比,Struts2标签库更加易用和强大。java

 

PS:使用标签,须要引入Struts2核心jar包,在jsp头部,加入<%@ taglib uri="/struts-tags" prefix="s" %>ajax

 

Struts2的模板和主题算法

     Struts2的UI标签都是基于模板和主题的。所谓模板,就是一些代码,Struts2标签使用这些代码渲染生成相应的HTML代码。模板是一个UI标签的外在表现形式,而且每一个标签都会有本身对应的模板。若是为全部的UI标签提供样式和视觉效果类似的模板, 那么这一系列的模板就造成了一个主题。服务器

     Struts2 默认提供了4 种主题,分别为 simple、xhtml、css_xhtml和Ajax。框架

  • simple主题:这是最简单的主题,使用该主题时,每一个UI标签只生成最基本的HTML元素,没有任何附加功能。
  • xhtml主题:这是Struts2的默认主题,它对simple主题进行了扩展,提供了布局功能、Label显示名称、以及与验证框架和 国际化框架的集成。
  • css_xhtml:该主题是xhtml的扩展,在对xhtml的基础之上添加对CSS的支持和控制。
  • Ajax:继承自对xhtml,提供 Ajax支持。

 

这4种内建主题中,xhtml为默认主题,但xhtml有必定的局限性。由于它使用表格进行布局,而且只支持每一行放一个表单项,这样一来,一旦遇到复杂的页面布局,xhtml就难以胜任了。此时,就须要改变Struts2的默认主题。jsp

     一般,经过设置常量struts.ui.theme,来改变默认主题,具体作法是在struts.xml或者struts.properties文件中增长相应的配置。好比想要设置使用simple的主题,那么须要在struts.xml中增长以下配置:布局

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

或者在struts.properties文件中增长以下配置:ui

struts.ui.theme=simple

Struts2标签库的分类

 

控制标签

if-elseif-else

<%--一、if elseif else的使用 --%>
<% //存入请求域中一个学生的成绩
    request.setAttribute("score", 89);
%>
<!-- 判断学生成绩,输出成绩所对应的ABCD -->
<s:if test="#request.score>90">
    优秀
</s:if>
<s:elseif test="#request.score>80">
    良好
</s:elseif>
<s:else>
    通常
</s:else>

iterator

<s:iterator value="customers">
<%--s:iterator是struts2的一个迭代标签,它的value属性取值是一个OGNL表达式
var属性:它的取值就是一个普通的字符串.
用了var:把每次遍历的对象做为value,把var的值做为key,存入ContextMap中
没用var:把每次遍历的对象压入栈顶,再下次遍历以前弹栈(从栈顶移走)。
begin:开始遍历的索引
end:遍历的结束索引
step:遍历的步长。 
status:计数器对象
    count 已经遍历的集合元素个数
    index 当前遍历元素的索引值
    odd   是否奇数行
    even  是否偶数行
    first 是否第一行
    last  是否最后一行
--%>
     <TR style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
          <TD><s:property value="custName"/></TD>
          <TD><s:property value="custLevel"/></TD>
          <TD><s:property value="custSource"/></TD>
          <TD><s:property value="custIndustry"/</TD>
          <TD><s:property value="custAddress"/></TD>
          <TD><s:property value="custPhone"/></TD>
     </TR>
</s:iterator>

数据标签

property

  • id:可选属性,指定该元素的标识。
  • default:可选属性,若是要输出的属性值为null,则显示default属性的指定值。
  • escape:可选属性,指定是否忽略HTML代码。
  • value:可选属性,指定须要输出的属性值,若是没有指定该属性,则默认输出ValueStack栈顶的值
<%-- 输出值栈中的值 --%>
<s:property value="custName"/>

a

<%--使用struts2的超连接标签发送请求:
    <s:a>链接内容</s:a>
    属性:
    href:指定url路径
    action:请求的动做名称(类名)
    namespace:动做名称所在的名称空间
    id:指定id
    method:指定Action调用方法
 --%>
 <s:a action="addUIUser" namespace="/user">添加用户</s:a>
 <s:a action="editUIUser" namespace="/user"> 编辑用户
     <s:param name="userid" value="%{'1'}"></s:param>
 </s:a>
 <a href="${pageContext.request.contextPath}/user/editUIUser.action?userid=1">原始超连接标签-编辑用户</a>

debug

     debug标签用于调试Struts2,使用它会在页面中生成一个debug标签,点击后会显示服务器各类对象信息,包括值栈、ContextMap等。

<s:debug/>

date

<%--s:date标签的使用:
    它是用于格式化输出日期
    name属性:取值是一个ognl表达式,表示要格式化的日期对象
    format属性:指定格式
    var属性:取值是一个普通的字符串。
           把格式化好的日期字符串做为value,把var的取值做为key。存入contextMap中
--%>
<% request.setAttribute("myDate",new Date());
  /*  SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
   String date = format.format(new Date());
   out.println(date); */
%>
${requestScope.myDate}<br/>
<s:property value="#request.myDate"/>
<s:date name="#request.myDate" format="yyyy年MM月dd日" var="sdate"/>
<br>
格式化后的日期:<s:property value="#sdate"/>
<br/>
${sdate}

url

<%-- url标签
    做用:用于存放一个路径
    属性:
        action:动做名称
        namespace:名称空间
        var:取值是一个普通字符串。他会把action和namespace组成一个url做为value,把var的取值做为一个key,存入contextMap中
--%>
<s:url action="addUIUser" namespace="/user" var="myurl"/>
<a href="<s:property value='#myurl'/>">添加用户——url</a>

表单标签

表单标签的通用属性

属性名

主题

数据类型

说明

title

simple

String

设置表单元素的title属性

disabled

simple

String

设置表单元素是否可用

label

xhtml

String

设置表单元素的label属性

labelPosition

xhtml

String

设置label元素的显示位置,可选值 : top 和 left(默认)

name

simple

String

设置表单元素的name属性,与Action中的属性名对应

value

simple

String

设置表单元素的值

cssClass

simple

String

设置表单元素的class

cssStyle

simple

String

设置表单元素的style属性

required

xhtml

Boolean

设置表单元素为必填项

requiredpositon

xhtml

String

设置必填标记(默认为*)相对于label元素的位置,可选值:left 和right(默认)

tabindex

simple

String

设置表单元素的tabindex属性

 

<form>标签的经常使用属性及描述

属性名

是否必填

类型

说明

action

String

指定提交时对应的action,不须要action后缀

enctype

String

HTML表单enctype属性

method

String

HTML表单method属性

namespace

String

所提交action的命名空间

 

<s:submit>标签的经常使用属性

属性名

是否必填

类型

说明

action

String

指定提交时对应的action

method

String

指定action中调用的方法

 

<s:password>标签的经常使用属性说明

属性名

说明

Name

用于指定密码输入框的名称

Size

用于指定密码输入框的显示宽度,以字符数为单位

MaxLength

用于限定密码输入框的最大输入字符串个数

showPassword

是否显示初始值,即便显示也仍为密文显示,用掩码代替

 

<s:radio>标签的属性及说明

属性名

是否必填

类型

说明

List

Cellection、Map、Enmumeration、Iterator,array

用于生成单选框中的集合

listKey

String

指定集合对象中的哪一个属性做为选项的value

listValue

String

指定集合对象中的哪一个属性做为选项的内容

 

<s:checkboxlist>标签的经常使用属性及说明

属性名

是否必填

类型

说明

name

String

指定该元素的name

list

Cellection、Map、Enmumeration、Iterator,array

用于生成多选框的集合

listKey

String

生成checkbox的value属性

listValue

String

生成checkbox后面显示的文字

 

select标签的经常使用属性及说明

属性名

是否必填

类型

说明

list

Cellection、Map、Enmumeration、Iterator,array

用于生成下拉框的集合

listKey

String

生成选项的value属性

listValue

Strmg

生成选项的显示文字

headerKey

String

在全部的选项前再加额外的一个选项做为其标题的value值

headerValue

String

显示在页面中header选项的内容

Multiple

Boolean

指定是否多选,默认为 false

emptyOption

Boolean

是否在标题和真实的选项之间加一个空选项

size

Int

下拉框的高度,即最多能够同时显示多少个选项

案例

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>注册界面</title>
    </head>
    <body>
        <s:form action="register" namespace="">
            <s:textfield name="username" label="用户名" key="Switch"/>       
            <s:password name="password" label="密码"/>
            <s:radio name="gender" list="#{'0':'男','1':'女'}" label="性别" value="0" />
            <s:textfield name="age" label="年龄"/>
            <s:select name="city" list="#{'bj':'北京','sh':'上海','gz':'广州','sz':'深圳'}" label="城市" headerKey="-1" headerValue="---请选择城市---" emptyOption="true"/>
            <s:checkboxlist name="hibbies" list="#{'code':'写代码','algorithm':'算法','movie':'电影'}" label="爱好"/>
            <s:checkbox name="married" label="是否已婚" value="true" labelposition="left"/>
            <s:textarea name="description" label="自我介绍" rows="5" cols="20"/>
            <s:file name="phone" label="头像"/>
            <s:submit value="提交"/>
            <s:reset value="重置"/>
        </s:form>
    </body>
</html>