1. 程式人生 > >struts-config.xml中 action 的attribute屬性與name屬性

struts-config.xml中 action 的attribute屬性與name屬性

1、在一般情況下,actionForm是被儲存在一定的scope中(request或session,通過action的scope屬性來配置),當我們在配置時,指定name而不指定attribute,那麼指定的name值就作為actionForm儲存在scope中的key值,我們可以在action中通過httpServletRequest.getAttribute("指定的name屬性值")來獲得這個actionForm; 當我們既配置了name又配置了attribute,那麼actionForm儲存在scope中的key值就採用attribute屬性指定的值了,這時要通過httpServletRequest.getAttribute("指定的attribute屬性值")來獲得actionForm,此時通過httpServletRequest.getAttribute("指定的name屬性值")是不能獲得actionForm的。 


所以,是否配置attribute屬性就決定了actionForm儲存在scope中的key值是採用name,還是採用attribute
 2、 在《Programming Jakarta Struts》這本書中的第四章“Configuring the Struts Application”中這樣一段說明來分別闡述這兩
個屬性:(102頁)
++++++++
atribute:
++++++++
The name of the request or session scope attribute under which the form bean for this action can be accessed.

value is only allowed here if there is form bean specified in the name attribute. This attribute is
optional and has no default value.
++++++++
name:
++++++++
The name of the form bean, if any, that is associated with this action. This value must be the name attribute
from one of the form-bean elements 
defined earlier. This attribute is optional and has no default value.
最初看這些真的還是不好區分這兩者。不過在仔細看過struts的原始碼以後,豁然開朗。。。
下面主要對attribute進行解釋,應為沒有人會對name屬性不瞭解的(呵呵。。。)

解釋:在struts例項化actionform的時候,有兩種情況:如果已經存在,那麼從記憶體中取回;如果第一次例項化,那麼建立,並放入記憶體。
這樣就有一個問題了,struts是根據什麼來取回並建立actionform的呢,答案就是attribute的值。讓我們進入struts的原始碼:
/**
*建立或者取回formbean方法
*該方法在:org.apache.struts.util.RequestUtils中
*/
public static Actionform createActionform(
HttpServletRequest request,
ActionMapping mapping,
ModuleConfig moduleConfig,
ActionServlet servlet) {
。。。。
。。。
// Is there form bean associated with this mapping?
//得到action mapping中attribute的值
String attribute mapping.getAttribute();
。。。。
。。。。
Actionform instance null;
HttpSession session null;
//yes!!就在這裡了,把建立以後的actionform放在request或者session裡,看到放入的名字了麼,就是mapping.getAttribute();
if ("request".equals(mapping.getScope())) {
instance (Actionform) request.getAttribute(attribute);
else {
session request.getSession();
instance (Actionform) session.getAttribute(attribute);
}
。。。
。。。


}


下面又有一個問題浮出水面:如果我沒有在action mapping中指定attribute呢,那struts 是如何解決的?
答案很簡單,如果單從結果上看,此時struts使用的name的值,為什麼呢,看struts原始碼:
/**
The request-scope or session-scope attribute name under which our
form bean is accessed, if it is different from the form bean's
specified <code>name</code>.
*該程式碼在:org.apache.struts.config.ActionConfig中
*/
protected String attribute null;
public String getAttribute() {
//yes!!!!就在這裡,看到了吧,如果你沒有設定attribute,那麼struts 會把name的值拿過來用。呵呵。。。
if (this.attribute == null) {
return (this.name);
else {
return (this.attribute);
}
}
public void setAttribute(String attribute) {
if (configured) {
throw new IllegalStateException("Configuration is frozen");
}
this.attribute attribute;
}

相關推薦

struts-config.xml actionattribute屬性name屬性

1、在一般情況下,actionForm是被儲存在一定的scope中(request或session,通過action的scope屬性來配置),當我們在配置時,指定name而不指定attribute,那麼指定的name值就作為actionForm儲存在scope中的key值,

Struts1的struts-config.xmlaction-mappings的parameter 屬性詳解

action-mappings的parameter 屬性 沒有struts之前,使用servlet,最常用的是doGet,doPost,service方法,如果有些經驗的程式設計師會合理的使用這三個方 法:如在使用者發出get的請求時,將使用者請求在doGet方法

struts-config.xmlaction元素的parameter屬性

沒有struts之前,使用servlet,最常用的是doGet,doPost,service方法,如果有些經驗的程式設計師會合理的使用這三個方法:如在使用者發出get的請求時,將使用者請求在doGet方法中處理,使用者發出post請求時,將使用者的請求用doPost請求處理,

Struts xmlAction的method路徑的三種匹配方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

strutsform表單的請求action路徑和struts-config.xml響應路徑的注意點

舉個例子:本人建立了一個ssh的專案demo,專案結構如下圖所示: 這個專案有登陸介面,有login.jsp檔案,這個檔案的form表單請求如下 <body> <h1&g

strutsstruts-config.xml檔案解釋

        String name = mapping.getName();        String type = mapping.getType();        String path = mapping.getPath();        System.out.println("actionN

Struts使用多個配置檔案 struts-config.xml

或許很多開發人員都面臨著這樣的困惑,那就是struct-config.xml檔案中有很多的配置,什麼action,formbean..... 我這裡說的100個action那是很小的專案了,呵呵,看得眼花繚亂,不利於模組化的開發和維護;解決的方法就是把struct-conf

spring的xmlp名稱空間C名稱空間簡化屬性賦值

p名稱空間與C名稱空間簡化屬性賦值 Spring給我們提供的一種比較簡便的方式來為我們的屬性賦值 P名稱空間用於簡化set方法的屬性賦值 C名稱空間用於簡化構造器的屬性賦值 第一步:加上我們的P名稱空間與C名稱空間 <?xml version="1.0" encodi

Struts-config.xml配置檔案《action-mappings》元素的詳解

Struts配置檔案的詳細解析 ction-mappings        該元素用於將Action元素定義到ActionServlet類中,它含有0到多個<action/>元素,其格式如下: <action-mappings> <

struts-config.xml

發的 pin pac element 重定向 需要 類型 cat content <struts-config>是struts的根元素,它主要有8個子元素,DTD定義如下: <!ELEMENT struts-config (data-sources?

Myeclispe下struts-config.xml文件無法圖形界面打開

xml文件 圖形 logs image 問題 項目 文件 未能 servlet 1.今天更改web.xml文件不小心誤刪了下面的配置文件,導致出現如圖的錯誤 <servlet-mapping> <servlet-name>action

struts-config.xml 文件:

alias inf void 聯系 section err nac nocache 文件的 struts-config.xml配置文件是一個在Web客戶端組件的視圖和模型之間的聯系,但你的項目的99.99就不會碰這些設置%。基本的配置文件包含以下主要內容: SNInte

struts-config.xml檔案配置

原文地址連結:http://blog.csdn.net/huozhicheng/article/details/5426356 <struts-config>是struts的根元素,它主要有8個子元素,DTD定義如下: [xhtml]&n

struts----struts-config.xml檔案配置學習

1.概述。        在Struts應用啟動時,會把Struts配置檔案中的配置資訊讀入到記憶體中,並把他們放到config包中相關javaBean類的例項 中,org.apache.struts.config包中的每一個類都和St

struts-config.xml的dtd檔案的宣告方式

第一種是PUBLIC關鍵字,訪問本地的DTD檔案,通過"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"這個別名在struts.jar檔案中查詢,如果找不到,再訪問url

java屬性物件屬性

1,定義    類屬性:又叫做靜態屬性,即被static修飾。    物件屬性:又叫例項屬性,非靜態屬性。    如果一個屬性宣告成類屬性,那麼所以的物件,都共享這麼一個值。    給所以英雄設定一個類屬性叫做“版權(copyright)”,那麼無論有多少具體的英雄,所以的英

一個struts問題!配置了web.xmlstruts-config.xml後,執行簡單的測試頁面(test.jsp)出問題100分急求!!!

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagExtraInfo java.lang.ClassLoader.defineClass0(Native Method) java.lang.ClassL

struts-config.xml配置

struts-config.xml是Struts的主要配置檔案,在該檔案中,可以配置資料來源、form-bean、action和plug-in(外掛)和資原始檔的資訊。其檔案主要結構如下所示: <?xml version="1.0" encoding="UTF-8"?

struts1的配置檔案struts-config.xml配置詳解

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "struts-co

Struts2Action接收引數的方法:屬性,Model,ModelDriver

Struts2中Action接收引數的方法主要有以下三種: 1.使用Action的屬性接收引數:     a.定義:在Action類中定義屬性,建立get和set方法;     b.接收:通過屬性接收引數,如:userName;     c.傳送:使用屬性名傳遞引數,如:u