struts标签

Posted zhouyeqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts标签相关的知识,希望对你有一定的参考价值。

本节内容

  1. 了解Struts2标签库的组成
  2. 掌握表单标签的使用
  3. 了解非表单标签的使用
  4. 掌握数据标签的使用
  5. 掌握控制标签的使用

一、Struts2标签库概述

  1. 使用标签的优势:
  • 使用简单
  • 可维护性强(避免使用Java代码)
  • 复用性高
  1. 标签库分类

  (UI:user Interface ;     Ajax:asynchronous javascript and xml)

  • UI标签:主要用于生产html元素的标签
    • 表单标签:主要用于生产HTML页面的form元素以及普通表单元素的标签
    • 非表单标签:主要用于生产页面上的树、Tab等标签
  • 非UI标签:主要用于数据访问、逻辑控制等的标签
    • 流程控制标签
    • 数据访问标签
  • Ajax标签:用于Ajax支持的标签

 

  1. 导入Struts标签库

    在JSP页面中使用Struts2标签库中提供的标签,必须使用taglib指令导入Struts2标签库

      <%@taglib prefix="s" uri="/struts-tags"%>

    a) prefix属性指定标签的前缀,此处指定标签的前缀为“s”,即使用Struts2标签库中的任一标签时,前面都应加上“s:”,例如“<s:property>”

    b) uri属性指定标签库描述文件的路径,此处设为“/struts-tags”,与struts-tags.tld文件中的默认uri一致

二、表单标签

Struts2提供了很多表单标签,大部分表单标签和HTML表单元素之间一一对应 。

表单标签将在 HTML 文档里被呈现为一个表单元素,标签的属性值可以被赋值为一个静态的值或一个 OGNL 表达式.

使用表单标签的 :

优点:   表单回显

缺点:对页面进行布局和排版

 

演示常见表单标签用法:

案例

Login.jsp

   <s:form action="log" method ="post">

       <s:checkboxlist name="a" label="请选择您喜欢的图书" list="{‘spring2.0‘,‘j2ee‘,‘ajax‘}"/>

       <s:radio name="b" label="请选择您喜欢的图书" list="{‘spring2.0‘,‘j2ee‘,‘ajax‘}"/>

       <s:select name="c" label="请选择您喜欢的图书" list="{‘spring2.0‘,‘j2ee‘,‘ajax‘}"/>

       <s:textfield name="uname" label="登录ID" maxlength="6" size="90px"/>

       <s:password name="upass" label="登录密码" maxlength="6" size="90px"/>

       <s:submit value="login"/>

       <s:reset value="reset"/>

       <s:token/>

   </s:form>

Struts2.xml

<package name="struts2" extends="struts-default">

       <action name="log" class="com.inspur.action.LoginAction">

           <result name="success">/login.jsp</result>

           <result name="error">/login.jsp</result>

       </action>

    </package>

LoginAction.java

public class LoginAction {

    private String uname;

    private String upass;

    private String a;

    private String b;

    private String c;

    get/set……

    public String execute(){

       System.out.println(a);

       System.out.println(b);

       System.out.println(c);

       if("ross".equals(this.uname) && "111".equals(this.upass)){

           return "success";

       }else{

           return "error";

       }

   }

}

 

三、非表单标签

非表单标签主要用于在页面中生成非表单的可视化元素,主要有:a、actionerror、actionmessage、component、div、fielderror、tabbedPanel、tree、treenode。

 

  1. S:fielderror标签

         作用:完成界面上的数据的校验,如果校验出错,则生成错误消息,然后迁移到错误输出界面上,用S:fielderror标签显示错误信息。

         工作流程:界面上发出请求给loginaction组件,先将界面上的数据封装到action对应的属性上,检测如果程序员重写了validate(),进行校验,如果校验通过则将请求转到execute()上处理请求,如果校验不通过,则迁移到input指定的错误输出界面

         错误消息显示:

                   <s:fielderror/>显示所有校验错误信息;

                   <s:fielderror fieldName="uname"/>显示某个校验信息;

案例:登录校验

Login.jsp

<body>

<font color="red"><s:fielderror/></font>

<form action="log.action">

        <table align="center">

           <tr><td>用户名:<input type="text" name="uname"></td>

               <td><font color="red"><s:fielderror fieldName="uname"/></font></td></tr>

           <tr><td>密&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="upass"></td>

               <td><font color="red"><s:fielderror fieldName="upass"/></font></td></tr>

           <tr><td><input type="submit" value="登录"></td></tr>

        </table>

    </form>

  </body>

在loginAction.java的属性设置之后和调用方法之前进行验证,一般只重写ActionSupport中的validate方法即可

@Override

    public void validate() {

       // 登录ID非空校验

       if("".equals(uname)){

           this.addFieldError("uname", "登录名为空");

       }

       // 登录密码非空校验

       if("".equals(upass)){

           this.addFieldError("upass", "登录密码为空");

       }else if(upass.length()<6 || upass.length()>12){

           this.addFieldError("upass", "登录密码长度必须在6到12之间");

       }

    }

Struts.xml:书写input返回结果页面

<package name="struts2" extends="struts-default">

       <action name="log" class="com.inspur.action.LoginAction">

           <result name="success">/login.jsp</result>

           <result name="error">/login.jsp</result>

           <result name="input">/login.jsp</result>

       </action>

    </package>

四、数据标签

数据标签主要用来提供各种数据访问功能

标签名

描述

action

该标签用来直接调用一个Action,根据executeResult参数,可以将该Action的处理结果包含到页面中

bean

该标签用来创建一个JavaBean对象

date

该标签用来格式化输出一个日期属性

debug

该标签用来生成一个调试链接,当点击该链接时,可以看到当前值栈中的内容

i18n

该标签用来指定国际化资源文件的baseName

include

该标签用来包含其他的页面资源

param

该标签用来设置参数

property

该标签用来输出某个值,该值可以是值栈或ActionContext中的值

set

该标签用来设置一个新的变量,并把新变量存储到特定的范围中

text

该标签用来输出国际化信息

url

该标签用来生成一个特定的URL

  1. 1.         property标签

property标签的作用是输出指定值

输出value属性指定的值,如果没有指定value属性,则默认输出ValueStack栈顶的值

属性名

是否必须

描述

default

如果输出的属性值为null,则显示default属性指定的值

escape

默认为true,即不解析HTML标签,如果设定为false则默认解析HTML标签

value

指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值

iid

指定该元素的标识

  1. 2.         Bean标签

bean标签主要用于创建一个JavaBean的实例

属性名

是否必须

描述

name

该属性指定要实例化的JavaBean实现类

var

如果指定了该属性,则JavaBean实例就会放入ActionContext中,从而允许直接通过该var属性来访问该JavaBean实例。如果不指定var属性,JavaBean实例则被放置在值栈中 栈顶。

 

Bean示例

示例一:

<s:bean name="com.haiersoft.ch04.model.Person">

         <s:param name="name" value="‘zhangsan‘" />

         <s:param name="age" value="18" />

         姓名为:<s:property value="name"/><br/>

         年龄为:<s:property value="age"/>

</s:bean>

示例二:

<s:bean name="com.haiersoft.ch04.model.Person" var="p">

         <s:param name="name" value="‘zhangsan‘" />

         <s:param name="age" value="18" />

</s:bean>

姓名为:<s:property value="#p.name" /><br />

年龄为:<s:property value="#p.age" />

  1. 3.         Param标签
  • param标签主要用于为其他标签提供参数 ,如bean

属性名

是否必须

描述

name

指定被设置参数的参数名

value

指定被设置参数的参数值,该值为Object类型

id

指定引用该元素的ID

 

示例(value="zhangdan"将zhangdan作为OGNL表达式解析,如果想作为字符串解析加单引号):

<s:param name="user">zhangsan</s:param>

<s:param name="user" value="‘zhangdan‘"/>

<s:param name="user" value="zhangdan"/>

 

  1. 4.         Set标签
  • set标签主要用于将某个值放入指定的范围内

属性名

是否必须

描述

var

设置变量的名称

scope

用来指定变量的有效范围,该属性值可以是application、session、request、page或action。如果没有指定该属性,则默认将该变量放置在ActionContext中

value

用来设置变量的值,如果没有指定该属性,则将ValueStack栈顶的值赋给该变量

id

该属性指定该元素的应用ID(被var代替,已经过时)

 

示例:

<s:set name="p1" value="#person" />

<s:set name="p1" value="’person’" />

<s:set name="p2" value="#person " scope="application" />

<s:set name="p3" value="#person " scope="session" />

 

数据标签案例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP ‘dataTag.jsp‘ starting page</title>

  </head>

  <body>

    <form action="">

        <!-- 设置value为字符串的时候需要加上单引号,否则会以OGNL表达式解析 -->

       <h4>bean标签</h4>

       <s:bean name="com.inspur.pojo.Person" var="person">

           <s:param name="age" value="21"></s:param>

           <%-- <s:param name="pname" value="‘zhangsan‘"></s:param>--%>

           <s:param name="pname" >zhangsan</s:param>

       </s:bean>

       <s:property value="#person.pname"/><br>

       <s:property value="#person.age"/><br><br>

       <!-- set标签:将value值设置到对应scope中的name属性中 -->

       <s:set name="p1" value="#person" />

       <s:set name="p2" value="‘person‘" />

       <s:set name="p3" value="#person.pname" scope="application" />

       <s:set name="p4" value="#person.age" scope="session" />

       <!-- 取对应范围的值 -->

       <s:property value="#p1"/> <br>

       <s:property value="#p2"/><br>

       <s:property value="#application.p3"/><br>

       <s:property value="#session.p4"/><br>

       <s:debug/>

    </form>

  </body>

</html>

 

 

五、控制标签

控制标签主要用于完成流程控制,例如分支、循环等操作,也可以完成对集合的合并、排序等操作

标签名

描述

if

该标签用于控制选择输出

elseIf/elseif

该标签同if标签结合使用,用来控制选择输出

else

该标签同if标签结合使用,用来控制选择输出

append

该标签用于将多个集合拼接成一个集合

generator

该标签是一个字符串解析器,用来将一个字符串解析成一个集合

iterator

该标签是一个迭代器,用来迭代输出集合中的数据

merge

该标签用于将多个集合拼接成一个集合,在使用方式上与append有区别

sort

该标签用于对集合进行排序

subset

该标签用于截取集合的部分集合,形成新的子集合

  1. 1.         if/elseif/else标签

 if、elseif、else这3个标签都用来进行分支控制。其中,if和elseif标签利用test属性的值来决定是否计算并输出标签体的内容

示例:

<!-- 判断成绩是否及格,不及格,良,优 -->

<s:set var="score" value="99" />

<s:if test=“#score<60">

         成绩为:不及格

</s:if>

<s:elseif test=“#score>=60 && #score<80}">

         成绩为及格

</s:elseif>

<s:elseif test=“#score>=80 && #score<90}">

         成绩为

</s:elseif>

<s:else>

         成绩为:优

</s:else>

  1. 2.         iterator标签

 iterator标签主要用于对集合进行迭代,其中集合类型可以是List、Set、Map或数组

属性名

是否必须

描述

value

指定迭代集合,通常使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合

var

指定遍历出集合中元素的变量名

status

指定迭代时的IteratorStatus实例,用于获取迭代状态

示例:

<table border=1 width=200>

         <s:iterator value="{‘JavaSE程序设计教程‘,

                                 ‘JavaEE轻量级框架-S2SH‘,

                                 ‘JavaWeb程序设计‘}" var="bookName">

                   <tr>

                            <td><s:property value=“#bookName" /></td>

                   </tr>

         </s:iterator>

</table>

程序案例:后台books和userList对象的生成省略

<!-- 遍历Map -->

<s:iterator value="books" var="tt">

<td><s:property value="#tt.key" /></td>

    <td><s:property value="#tt.value" /></td><br>

</s:iterator>

<!-- 遍历List<User> -->

<table>

    <s:iterator value="userList" var="tt1" status="sta">

       <tr>

           <s:if test="#sta.index%2==0">

              <td style="color: red"><s:property value="#tt1.userName" />:<s:property value="#tt1.age" /></td>

           </s:if>

           <s:else>

           <td style="color: green"><s:property value="#tt1.userName" />:<s:property value="#tt1.age" /></td>

           </s:else>

       </tr>

    </s:iterator>

</table>

以上是关于struts标签的主要内容,如果未能解决你的问题,请参考以下文章

struts标签怎样用?

Struts2的标签库——使用Struts2的标签库

关于struts标签判断问题

Struts2 struts标签

struts2标签学习笔记

struts2学习struts标签2(界面标签其他标签)