Struts2之数据标签(一)

一.Struts2的数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能。数据标签主要包括:property、set、push、param、bean、action、include、url、i18n和text、date及debug标签等。

1.property标签:用于输出value属性指定的值。可以与<s:bean>标签结合使用,一个是给bean赋值,一个是从bean中读取值。

(1).如果没有指定value属性,默认输出valueStack(值栈)栈顶的值,它有以下几个属性:

— default:可选属性,如果需要输出的值为null,则输出default属性指定的值。

— escape:可选属性,指定是否escapeHTML代码。

— value:可选属性,指定要输出的属性值,默认输出valueStack栈顶的值。

— id:可选属性,指定引用该元素的ID。

(2).接下来附上一个例子,新建一个Struts2项目,项目名为DataLabelTest,在使用Struts2标签时,一定要在前面加入一个标签库,即加入这行代码:

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

— 在WebRoot目录底下新建一个登录页面login.jsp,点击登录按钮后,跳转到一个login的action中,其中还使用了property标签显示提示信息,页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'login.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

</head>

<body>
	<center>
	<s:property value="tip"/>
		<s:form action="login" method="post">
			<s:textfield name="username" label="用户名"></s:textfield>
			<s:password name="password" label="密码"></s:password>
			<s:submit value="登录"></s:submit>
		</s:form>
	</center>
</body>
</html>

— 再新建一个action类,LoginAction类,放在com.action包下,其中如果我们输入的用户名为xg,密码为123的话,就返回继承于ActionSupport类的字符串SUCCESS,如果不是即返回ERROR,并提示登录失败的信息,LoginAction类代码如下:

package com.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	private String username;
	private String password;
	private String tip;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getTip() {
		return tip;
	}

	public void setTip(String tip) {
		this.tip = tip;
	}

	public String execute() {
		if (username.equals("xg") && password.equals("123")) {
			return SUCCESS;
		} else {
			setTip("登录失败");
			return ERROR;
		}
	}
}

— 接着,配置一下struts.xml配置文件,如果从LoginAction类中返回的为success的话,即跳转到login_success.jsp页面,返回error的话,跳转到login.jsp页面,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<constant name="struts.devMode" value="true"></constant>
	<package name="default" namespace="/" extends="struts-default">
		<action name="login" class="com.action.LoginAction">
			<result name="success">/login_success.jsp</result>
			<result name="error">/login.jsp</result>
		</action>
	</package>
</struts>

— 最后,附上登录成功后跳转的login_success.jsp页面,使用了property标签来显示用户名,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'login_success.jsp' starting page</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>

  <body>
    尊敬的<s:property value="username"/>用户,登录成功。
  </body>
</html>

— 部署此项目到tomcat服务器上,开启tomcat服务器,运行效果如下:

用户名输入xg,密码输入123后,按下登录按钮,跳转到login这个action,显示用户名,即:

如果用户名和密码输入错误的话,会跳转到login.jsp,提示登录失败:

2.set标签:用于将某个值放入指定范围内,如application、session范围等。

(1).set标签在某些情况下是比较有用的,当在页面中多次引用一个复杂的表达式时或当某个值所在的对象图深度非常深时,例如如下:person.worker.wife.parent.age,每次访问该值不仅性能低下,而可读性也很差。要解决这个问题,可以将该值设置成以一个新值,并放入特定范围内。

(2).set标签属性:

— name:必填,重新生成的新变量的名字。

— scope:可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action五个值。如果没有指定,默认是放在Stack Context中,即栈的上下文中。

— value:可选,指定将赋给变量的值,如果没指定,则将ValueStack栈顶的值赋给新变量。

— id:可选,指定该元素的引用ID。

(3).接下来附上一个例子,同样也在DataLabelTest项目底下写测试代码。

— 首先,新建一个Bean类,即Person类,里面有两个属性name和age,分别为这两个属性设置set与get方法,代码如下:

package com.bean;

public class Person {
	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

— 接着,新建一个person_message.jsp标签,使用了bean数据标签创建一个JavaBean实例,并将其放在Stack Context中,其中利用了param数据标签为name和age属性赋值,再利用set标签将这个bean对象放入OgnlContext中,然后利用property标签显示出来,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'person_message.jsp' starting page</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>

  <body>
    <s:bean name="com.bean.Person" id="person">
    	<s:param name="name" value="'John'"/>
    	<s:param name="age" value="23"/>
    </s:bean>
    <s:set name="p" value="#person"/>
    <s:property value="#p.name"/><br/>
    <s:property value="#p.age"/><br/>
  </body>
</html>

— 最后,运行效果如下:

— 这里,默认是将bean对象放入了栈的上下文中,如果想把这些值保存到application或session范围里,再显示出来,可以把上面的person_message.jsp页面中的主要代码分别改为:

将Stack Context的p值放入application范围内:

    <s:bean name="com.bean.Person" id="person">
    	<s:param name="name" value="'John'"/>
    	<s:param name="age" value="23"/>
    </s:bean>
    <s:set name="p" value="#person" scope="application"/>
    <s:property value="#attr.p.name"/><br/>
    <s:property value="#attr.p.age"/><br/>
    <s:debug></s:debug>
  </body>

这里指定了scope属性,改为application,获取时用#attr.p.name来获取到name值。

将Stack Context的p值放入session范围内,并使用了Ognl表达式来获取到相应的值:

    <s:bean name="com.bean.Person" id="person">
    	<s:param name="name" value="'John'"/>
    	<s:param name="age" value="23"/>
    </s:bean>
    <s:set name="p" value="#person" scope="session"/>
 	${sessionScope.p.name }<br/>
 	${sessionScope.p.age }<br/>

运行效果都是一样的。

3.push标签:可以将某个值放到ValueStack(值栈)的栈顶,从而可以更简单地访问该值。

(1).它有两个属性:

— value:必填属性,用于指定要放到ValueStack(值栈)栈顶的元素。

— id:可选属性,指定用于引用此标签的ID。

如果对某个对象操作比较频繁,可以使用push标签将这个对象压入值栈的顶部,随后针对该对象的操作就可以简化了。

(2).将上面的person_message.jsp页面中的主要代码改为如下:

    <s:bean name="com.bean.Person" id="person">
    	<s:param name="name" value="'Ann'"/>
    	<s:param name="age" value="20"/>
    </s:bean>
	<s:push value="#person">
		<s:property value="name"/><br/>
		<s:property value="age"/>
	</s:push>

将person对象的值放入值栈的栈顶,运行后如下图所示:

4.param标签:主要用于为其他标签提供参数,如为append、merge、bean和include标签提供参数。

(1).该标签有以下属性:

— name:可选,指定需要设置参数的参数名。

— value:可选,指定需要设置参数的参数值。

— id:可选,指定引用该元素的id。

(2).用法:

— <s:param name="name" value="‘Ann‘"/>

— <s:param name="name">Ann</s:param>

5.bean标签:用于创建一个JavaBean的实例。当创建JavaBean实例时,可以在标签内使用param标签为该JavaBean实例传入属性,要使用这个标签,需要为该JavaBean类提供对应的setter方法。如该JavaBean类提供了对应的getter方法,就可以访问对应的属性。

(1).bean标签的属性:

— name:必填,指定要实例化的JavaBean的实现类。

— id:可选,如指定了该属性,则该JavaBean实例会被放入Stack Context(栈的上下文)中,而不Value Stack(值栈),从而允许直接通过该id属性访问该JavaBean实例。

(2).使用bean标签注意事项:在bean标签内时,bena标签创建的JavaBean实例放在ValueStack的栈顶,该标签结束,生成的子集被移出valueStack栈,除非指定了id属性。

(3).接下来附上一个使用bean标签和param标签例子:

— 我们可以新建一个JavaBean类,即Student类,此类放在com.bean包下,其中此测试代码也放在DataLabelTest项目下,代码如下:

package com.bean;

public class Student {
	private int id;// 学号
	private String name;// 学生姓名
	private int age;// 学生年龄
	private String sex;// 学生性别
	private String major;// 学生专业

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getMajor() {
		return major;
	}

	public void setMajor(String major) {
		this.major = major;
	}

}

— 接着新建一个页面student_message.jsp,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'student_message.jsp' starting page</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>

  <body>
  <!-- 使用bean标签创建一个com.bean.Student类的实例,其中不带id属性的用法 -->
  <s:bean name="com.bean.Student">
  	<!-- 使用param标签为com.bean.Student类的实例传入参数 -->
  	<s:param name="id" value="1"/>
  	<s:param name="name" value="'张三'"/>
  	<s:param name="age" value="23"/>
  	<s:param name="sex" value="'男'"/>
  	<s:param name="major" value="'市场营销'"/>
  	学号为:<s:property value="id"/><br/>
  	姓名为:<s:property value="name"/><br/>
  	 年龄为:<s:property value="age"/><br/>
  	 性别为: <s:property value="sex"/><br/>
  	专业为:  <s:property value="major"/>
  </s:bean>
  <br/>
  <!-- 使用bean标签创建一个com.bean.Student类的实例,带id属性的用法 -->
  <s:bean name="com.bean.Student" id="student">
  <!-- 使用param标签为com.bean.Student类的实例传入参数 -->
  	<s:param name="id">2</s:param>
  	<s:param name="name">李四</s:param>
  	<s:param name="age">22</s:param>
  	<s:param name="sex">男</s:param>
  	<s:param name="major">计算机</s:param>
  </s:bean>
	  学号为:<s:property value="#student.id"/><br/>
	  姓名为:<s:property value="#student.name"/><br/>
	  年龄为:<s:property value="#student.age"/><br/>
	  性别为: <s:property value="#student.sex"/><br/>
	  专业为:<s:property value="#student.major"/>
  </body>
</html>

— 运行效果如下:

6.以上就是Struts2中数据标签中的一些常用标签,还有一些数据标签,等到下次写了,以免篇幅过长,请见谅。

7.以上内容仅供大家学习参考,写得不好,请见谅,如有错误,请指出,谢谢!



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-02 04:36:59

Struts2之数据标签(一)的相关文章

Struts2之数据标签(二)

Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name以及namespace.如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图支援)包含到本页面中来. (1).此标签的属性: - id:可选属性,该属性将会作为该

(二十一)Struts2 数据标签

Struts2 的数据标签主要用于操作页面上显示的数据.下面列出了主要的数据标签: action标签 此标签允许开发人员通过指定action名称和可选的命名空间直接从JSP页面调用action.标签的正文内容用于呈现action的结果.在struts.xml中为此action定义的任何结果处理程序将会被忽略,除非指定executeResult参数. <div>Tag to execute the action</div> <br /> <s:action name

struts2学习(8)struts标签1(数据标签、控制标签)

一.struts2标签简介: struts标签很多,功能强大,这是优点: 但是缺点的话,性能方面可能会,各方面速度啊啥的会降低:有人比较测试,struts性能比jstl低很多: 二.struts2数据标签: com.cy.model.Student.java: package com.cy.model; public class Student { private int id; private String name; private int age; public Student() { s

Struts2的标签库(四)——数据标签

Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来.此标签的属性如下: var属性:可选属性,一旦定义了该属性,该Action将被放入Stack Context的栈顶. name属性:必选属性,通过该属性指定此标签调用哪个Action. namespace属性:可选属性,通过该属性指定调用Action所在的namespace. executeRes

struts2数据标签

数据标签: 数据标签主要用于提供各种数据范文相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能, 数据标签主要包含:action,bean,date,debug,i18n,include,param,push,set,text,url,property: 1. action:用于直接在JSP页面直接调用一个Action,通过指定executeResult参数,还可以将该Action的处理结果包含到本页面中来.如果指定了executeResult参数的属性值为true,该标签还

Struts2中UI标签之表单标签介绍

1.在Struts2中UI标签的表单标签分为两种:form标签本身和单个表单标签. 2.Struts2表单标签包括:form.textfield.password.radio.checkbox.checkboxlist.select.doubleselect.combobox.optiontransferselect.optgroup.updownselect.textarea.hidden.file.label.submit.token.head.datepicker.reset.richte

Struts2(十)OGNL标签二与Struts2标签

一.Struts2标签的优势 标签库简化了用户对标签的使用 结合OGNL使用,对于集合.对象的访问功能非常强大 提供可扩展的主题.模板支持.极大简化了视图页面的编写 不依赖任何表现层技术 Struts2标签的分类: 通用标签(Generir Tags) 数据标签(Data Tags) 控制标签(Control Tags) UI标签(UI Tags) Ajax标签(Ajax Tags) 二.数据标签 web.xml <filter> <filter-name>struts2</

Struts2之控制标签

Struts2的控制标签,主要用于完成流程控制,以及对ValueStack中的控制,控制标签可以完成输出流程的控制,例如循环.分支等操作,也可以完成对集合的合并.排序等操作. 1.常用的控制标签有:if.elseif.else.iterator.append.merge.generator.subset.sort等. 下面分别对这些控制标签进行介绍,并介绍如何使用这些控制标签: (1).if.elseif.else标签:if标签用来控制基本的条件处理流程,通常和else标签或者elseif标签连

(转)struts2:数据校验,通过XWork校验框架实现(validation.xml)

转载自:http://www.cnblogs.com/nayitian/p/3475661.html struts2:数据校验,通过XWork校验框架实现(validation.xml) 根据输入校验的处理场所的不同,可以将输入校验分为客户端校验和服务器端校验两种.服务器端验证目前有两种方式: 第一种: 参考:struts2:数据校验,通过Action中的validate()方法实现校验,图解 第二种: 使用validate()方法校验时,如果Web应用中存在大量Action就需要多次重写val