码迷,mamicode.com
首页 > 其他好文 > 详细

struts标签

时间:2017-07-14 21:12:46      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:错误   method   简单   sort   通过   实现   exec   width   deb   

本节内容

  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标签

标签:错误   method   简单   sort   通过   实现   exec   width   deb   

原文地址:http://www.cnblogs.com/zhouyeqin/p/7172131.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!