程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> struts2進階篇(3),struts2進階

struts2進階篇(3),struts2進階

編輯:JAVA綜合教程

struts2進階篇(3),struts2進階


一、struts.xml中<package>的namespace屬性的用法

在實際的開發中常會遇到name相同的<action>,如下代碼:

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

<struts>
    <package name="default" namespace="/" extends="struts-default">
		
	<action name="add" class="action.UserAction" method="add">
		<result >addUser.jsp</result>
	</action>
	<action name="add" class="action.HouseAction" method="add">
		<result>addHouse.jsp</result>
	</action>
    </package>
</struts>

  以上的配置中在同一個namespace下有兩個相同name為add的<action>,這樣就不能區別了,為了解決這個問題,我們可以把兩個<action>放在不同的namespace下,代碼如下:

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

<struts>
    <package name="user" namespace="/user" extends="struts-default">
		
	<action name="add" class="action.UserAction" method="add">
		<result >addUser.jsp</result>
	</action>
    </package>
    <package name="house" namespace="/house" extends="struts-default">
	<action name="add" class="action.HouseAction" method="add">
		<result>addHouse.jsp</result>
	</action>
    </package>
</struts>

 這樣將不同模塊放在不同的namespace下就可以區分了,但是在請求action時要URL中的action名前加相應的namespace名,如請求第一個使用:http:localhost:8080/Struts2Demo/user/add

二、使用<include>包含拆分的struts.xml配置文件

在大型項目中往往一個struts.xml配置過於龐大,難於維護,需要將struts.xml進行拆分.

拆分後的struts.xml文件:

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

<struts>
    <include file="struts-house.xml"/>
     <include file="struts-add.xml"/>
</struts>

拆分後的struts-house.xml文件:

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

<struts>
    <package name="house" namespace="/house" extends="struts-default">
	<action name="add" class="action.HouseAction" method="add">
		<result>addHouse.jsp</result>
	</action>
    </package>
</struts>

拆分後的struts-user.xml文件:

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

<struts>
    <package name="user" namespace="/user" extends="struts-default">
		
	<action name="add" class="action.UserAction" method="add">
		<result >addUser.jsp</result>
	</action>
    </package>
</struts>

三、<result>的配置

1.<result>標簽中的name屬性用法

我們定義的action類繼承的Action接口中定義了幾種action方法的返回值的靜態常量字符串。

1.SUCCESS:表示Action執行成功,顯示結果視圖給用戶。

2.NONE:表示Action執行成功,不顯示視圖給用戶。

3.ERROR:表示Action執行失敗,顯示錯誤頁面給用戶。

4.INPUT:表示Action需要更多的輸入信息,回到INPUT對應的頁面。

5.LOGIN:表示用戶沒有正確登陸而沒有正確執行,將返回該登陸視圖。

當然我們也可以自定義Action方法返回值的類型。會根據返回值尋找不同的result標簽。

2.<result>標簽中的type屬性的用法

使用<result>中的type屬性就可以定義以不同的方式輸出結果,它默認是"dispatcher",下面是type屬性的一些常用配置:

1.dispatcher:請求轉發到指定的URL

2.redirect:請求重定向到指定的URL

3.redirectAction:請求重定向到指定的Action

4.chain:Action鏈式處理,將請求轉發到指定的Action

5.json:實現Ajsx時,返回JSON對象。

四、動態結果的配置

現在大家來考慮一個問題:例如在一個項目中分為管理員和普通用戶兩類,如果管理員登陸成功後跳轉到後台管理頁面,普通用戶登陸成功後跳轉到首頁,像這種在配置<result>時,結果頁面不能確定,需要運行時才能確定該怎麼辦呢?

下面看這個方法來解決這個問題:

package action;

import com.opensymphony.xwork2.ActionSupport;

import entity.User;

public class DynamicAction extends ActionSupport {
	private User user;
	// 下一個跳轉到的Action
	private String nextDispatch;
	
	public String login(){
		if (user.getPassword().equals("common")) {
			nextDispatch="common";
			return SUCCESS;
		} else if (user.getUsername().equals("admin")) {
			nextDispatch="admin";
			return SUCCESS;
		} else {
			return INPUT;
		}
	}
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String getNextDispatch() {
		return nextDispatch;
	}
	public void setNextDispatch(String nextDispatch) {
		this.nextDispatch = nextDispatch;
	}
	

}

  在web.xml中的配置:

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

<struts>
    <package name="user" namespace="/user" extends="struts-default">
		
	<action name="login" class="action.UserAction" method="login">
		<result name="success" type="redirectAction">${nextDispatch}</result>
	</action>
          
         <action name="common" class="action.CommonAction">
               <result  name="success">common.jsp</result>
           </action>
           <action name="admin" class ="action.AdminAction">
                <result name="success">admin.jsp</result>
            </action>
    </package>
</struts>

在這個配置文件中,使用${nextDispatch}取出了存儲在UserAction中的nextDispatch變量的值,然後再根據它的值,使用redirectAction方式重定向到name為common或admin的<action>.

五、struts.xml中全局結果的配置

配置跳轉公共錯誤頁面的<result>

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

<struts>
    <package name="user" namespace="/user" extends="struts-default">
	
          <global-results>
                   <result name="error">/error.jsp</result>
           </global-results>

	
	<action name="add" class="action.UserAction" method="add">
		<result >addUser.jsp</result>
	</action>
    </package>
</struts>

  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved