Struts2常用标签的使用以及Action传值

为了学习struts2框架,这次练习完成了一个简单的功能,希望能够在struts表单标签的使用以及传值方面能够对大家的学习起到参考作用。

  • 项目功能

项目的功能是在提交页面输入个人信息之后点击提交跳转到一个新的页面,新的页面会显示之前所填写的个人信息。

  • 开发环境和工具

已配置最新版Java开发环境的Windows系统、MyEclipse 2014/2016、Tomcat服务器7.0/8.0/9.0。

  • 内容介绍

本次练习中出现的struts2表单标签:

<s:textfield/>文本输入框

<s:select/>选择输入框

<s:radio/>选择按钮

<sx:datetimepicker/>时间输入

<s:checkboxlist/>选择按钮(复选)

<s:combobox/>选择输入+直接输入

本次项目中所出现的其他struts2标签:

<s:include/> 可以导入页面

<s:property/>显示对应数据栈栈顶值(也就是输出值)

<s:if>、<s:elseif>、<s:else>控制标签

<s:date>格式化输出日期标签

  • 实现代码:

首先需要配置strut2的环境,预先在WebRoot/WEB-INF/lib里面导入struts常用的几个包。此处需要留意的是,我们项目中所用到的<sx:datetimepicker/>在包 struts2-dojo-plugin-2.3.24.1.jar 里面,记得导入。

然后是web.xml的配置。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xmlns="http://xmlns.jcp.org/xml/ns/javaee" 	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 	http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<filter>
		<filter-name>struts 2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts 2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
	

还有struts.xml的配置。

struts.xml

<?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>
<package name="default"  extends="struts-default" >
<action name="save" class="org.action.StrutsAction" >
	<result name="error">/error.jsp</result>
	<result name="input">/index.jsp</result>
	<result name="success">/success.jsp</result>
</action>
</package>
</struts>

这些配置都是常用的也是必须的就不用说了。

struts.xml里面result的意思是如果验证成功了那么跳转到success.jsp,如果验证失败了跳转到error.jsp(实际上这个项目不会失败),如果输入校验失败了那么会回到index.jsp并且输出提示信息。

下面是重点内容了:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%@taglib prefix="sx" uri="/struts-dojo-tags"%>
<html>
  <head>
    <title>struts2标签学习</title>
    <sx:head/>
	<s:head/>
  </head>

  <body>
    	<div style="margin-top:140px;margin-left:38%;font-family:Microsoft YaHei;text-align:center">
    		<s:form action="save.action" method="post" >
    			<table>
    					<s:param name="id" value="学生"/>
    				<tr>
    					 <s:textfield  label="学号  " name="number"></s:textfield>
    				</tr>
    				<tr>
    					<s:textfield  label="姓名 " name="name"></s:textfield>
    				</tr>
    				<tr>
    					<s:select list="#{0:'计算机专业',1:'通信专业',2:'机械工程及自动化',3:'文学院'}" label="专业" name="profe" ></s:select>
    				</tr>
    				<tr>
    					<s:radio list="#{1:'男',0:'女'}" name="sex" label="性别        " > </s:radio>
    				</tr>

    				<tr>
    					<sx:datetimepicker name="birthday" label="出生日期    "></sx:datetimepicker>
    				</tr>
    				<tr>
    					<s:set name="list" value="{'数据结构','离散数学','计算机组成原理'}"></s:set>
    					<s:checkboxlist list="#list" name="course" label="选择课程" ></s:checkboxlist>
    				</tr>

    				<tr>
    					<s:combobox list="{'上海市','北京市','重庆市','天津市','河南省','河北省','广东省'}" name="addr" label="籍贯"></s:combobox>
    				</tr>

    				<tr>
    					<s:textfield   label="总分  " name="grade"></s:textfield>
    				</tr>
    			<tr>
    				<td><s:submit value="提交"></s:submit>
   					<s:reset value="重置"></s:reset></td>
   				</tr>
   				</table>
    		</s:form>
    	</div>
  </body>
</html>

标签的具体介绍就不多说了,大家可以自行修改尝试一下。

然后是

StrutsAction.java

package org.action;
import java.util.*;
import java.util.Map;
import java.util.Date;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class StrutsAction extends ActionSupport{
	private String number;   //每一个在index.jsp填写的数据都需要有get和set方法,名字与value相对应。
	private String name;
	private String profe;
	private String sex;
	private Date birthday;
	private String grade;
	private String course;
	private String addr;
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number=number;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name=name;
	}
	public String getProfe() {
		return profe;
	}
	public void setProfe(String profe) {
		this.profe=profe;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex=sex;
	}
	public Date getBirthday(){
		return birthday;
	}
	public void setBirthday(Date birthday){
		this.birthday = birthday;
	}
	public String getCourse() {
		return course;
	}
	public void setCourse(String course) {
		this.course=course;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr=addr;
	}
	public String getGrade(){
		return grade;
	}
	public void setGrade(String grade){
		this.grade=grade;
	}
	public String execute() throws Exception {
		String[] courseValues = this.getCourse().split(", ");   //这句代码的意思是把复选的不同选项
		String[] profeValues = this.getProfe().split(", ");     //拼接成为一个字符串,且以","分隔
		return SUCCESS;                                         //直接返回成功
	}
	public void validate() {                        //输入校验,如果任何一项输入值为空那么返回并重新输入
		if(this.getNumber()==null||this.getNumber().trim().equals(""))
			addFieldError("number","学号不能为空");
		else if(this.getName()==null||this.getName().trim().equals(""))
			addFieldError("name","姓名不能为空");
		else if(this.getProfe()==null||this.getProfe().trim().equals(""))
			addFieldError("profe","专业不能为空");
		else if(this.getSex()==null||this.getSex().trim().equals(""))
			addFieldError("sex","性别不能为空");
		else if(this.getBirthday()==null)
			addFieldError("birthday","生日不能为空");
		else if(this.getCourse()==null||this.getCourse().trim().equals(""))
			addFieldError("course","课程不能为空");
		else if(this.getAddr()==null||this.getAddr().trim().equals(""))
			addFieldError("addr","籍贯不能为空");
		else if(this.getGrade()==null||this.getGrade().trim().equals(""))
			addFieldError("grade","成绩不能为空");
	}
}

接下来是输出信息的代码:

success.jsp

 <%@ page language="java" pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
     <head>
     <title>信息显示</title>
     </head>
     <body>
     <div style="margin-left:37%;margin-top:100px;font-family:Microsoft YaHei">
		<!--
		这是一个测试。<br/>
		<s:property value="id"/>
		<s:property value="name"/>
		<s:property value="number"/> <br/>
		这是另一个测试:<br/>
		<s:property value="#request.id"/><br/>
		<s:property value="#request.name"/><br/>
		<s:property value="#request.number"/><br/>
		<s:property value="#request.zhuanye"/><br/>
		<s:property value="#request.sex"/><br/>
		<s:property value="#request.birthday"/><br/>
		<s:property value="#request.course"/><br/>
		<s:property value="#request.addr"/><br/>
		<s:property value="#request.grade"/><br/>
		 <br/>
	 -->
		  带参数的导入:<br/>
		  <s:include value="includer.jsp">
			  <s:param name="java" value="'终于成功了哈哈哈哈'"/>
		  </s:include>
		  <br>
		  <table border="1">
		  	<caption>提交的信息</caption>
		  		<tr>
		  			<td>学号:</td>
		  			<td><s:property value="number"/></td>
		  		</tr>

		  		<tr>
		  			<td>姓名:</td>
		  			<td><s:property value="name"/></td>
		  		</tr>

		  		<tr>
		  			<td>所在专业:</td>
		  			<td><s:if test='profe == "0" '>
		  				计算机专业
		  				</s:if>
		  				<s:elseif test='profe == "1" '>
		  				通信专业
		  				</s:elseif>
		  				<s:elseif test='profe == "2" '>
		  				机械工程及自动化
		  				</s:elseif>
		  				<s:elseif test='profe == "3" '>
		  				文学院
		  				</s:elseif>
		  		</tr>

		  		<tr>
		  			<td>性别:</td>
		  			<td>
		  				<s:if test='sex == "1" '>
		  				男
		  				</s:if>
		  				<s:else>
		  				女
		  				</s:else>
					</td>
		  		</tr>

		  		<tr>
		  			<td>出生日期:</td>
		  			<td><s:date name="birthday" format="yyyy-MM-dd" nice="false"/></td>
		  		</tr>

		  		<tr>
		  			<td>进修课程:</td>
		  			<td><s:property value="course"/></td>
		  		</tr>
		  		<tr>
		  			<td>籍贯:</td>
		  			<td><s:property value="addr"/></td>
		  		</tr>
		 	 <tr>
		  			<td>总分:</td>
		  			<td><s:property value="grade"/></td>
		  		</tr>
		  </table>
		  </div>
     </body>
</html>

另外值得一提的是,<s:include/>标签因为导入了另外一个界面的信息,所以还有一个文件:

includer.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
     <head>
     <title>被导入的页面</title>
     </head>
     <body>
		 该页面已被导入,携带的参数值为:
		 ${param.java}
     </body>
</html>

代码到这里就差不多了,看看效果吧。

  • 效果图

OK~大功告成~

代码在稍后会上传的。

时间: 2024-10-05 04:02:01

Struts2常用标签的使用以及Action传值的相关文章

struts2常用标签

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的jsp页面,也可以说Veloc

Struts2常用标签总结

Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常用的jsp页面,也可以说Veloc

Struts2常用标签(转载)--【SSH】

出处:Struts2常用标签总结 Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求. Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在各种表现技术中使用.包括最常

struts2 常用标签的一般用法

1.<s:property/>标签value 默认来自top of stack,默认的类型是Object <s:property value="username"/><br/>取username(对象)的值, <s:property value="'username'"/><br/>显示一个字符串 <s:property value="sefdsafa" default="

struts2中关于jsp页面向action传值出现乱码问题

在JSP页面输入中文并传给后台的时候,常常会出现乱码问题,产生乱码的原因:java在进行传值的时候,默认用的是iso-8859-1的编码形式进行传输,而我们jsp页面常用的则是utf-8的编码形式.所以,两者不对应,在解析的时候就出现乱码现象. 有以下几种解决方案: 一:在struts.xml文件中添加 <constant name="struts.i18n.encoding" value="utf-8"></constant> 注:这里va

struts2 常用标签

版权声明:本文为博主原创文章,未经博主允许不得转载. Struts2可以将所有标签分成3类: 准备工作:需要在JSP页面引入标签库 <%@ taglib prefix="s" uri="/struts-tags" %> 1.<s:set/>标签 <!-- 用法一 相当于 ActionContext.getContext().put(key, value) --> <s:set name="name" va

struts常用标签与校验器

struts常用标签 <body> <s:form action="" method="post"> <s:textfield name="username" label="用户名"></s:textfield> <!-- 文本框  --> <s:password name="password" label="密码">

Struts2页面开发中常用标签使用说明

1. Struts2页面开发中常用标签使用说明 1.1.往action里传值的使用方式: <input name="userName" type="text" class="input6" size="15"> a. userName属性需要在访问的action中提供相应的属性,并有SET/GET方法. b. 可以不在访问的action中提供相应的属性,用request. getParameter_r(“userN

【Struts2五】ValueStack以及ognl表达式二(常用标签)

Ognl常用标签:  1.s:debug 如果把该标签放入到s:iterator中可以看到当前正在迭代的元素的状态   2.s:property 1.输出 2.value属性:值能直接跟ognl表达式 3.如果value属性不写,则默认输出栈顶的元素    3:s:iterator标签 (1).iterator迭代Collection,Map,Object[],还可以以组合的形式迭代 (2).当前正在迭代的元素在栈顶 (3).如果value属性不写,则默认迭代栈顶的元素 (4).如果迭代的是ma