1. 程式人生 > >Struts2常用標籤的使用以及Action傳值

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~大功告成~

程式碼已經上傳:http://download.csdn.net/detail/qq_33171970/9519006

不要積分的喲~~~所以給我點個贊可以嗎~感謝~