Struts2的動態Action實現

2022-06-24 10:30:11 字數 3815 閱讀 7931

源自:struts2的動態action實現

在struts2中動態方法呼叫有三種方式。

一、指定method屬性

在struts.xml中指定action的method屬性。

<

package

name

=」demo1」

extends

=」struts-default」

>

<

action

name

=」login」

class

=」com.demo.loginaction」

/>

<

result

name

=」input」

>/input.jsp

result

>

<

result

name

=」error」

>/error.jsp

result

>

<

result

name

=」success」

>/success.jsp

result

>

action

>

<

action

name

=」registry」

class

=」com.demo.loginaction」method

=」registry」/>

<

result

name

=」input」

>/input.jsp

result

>

<

result

name

=」error」

>/error.jsp

result

>

<

result

name

=」success」

>/success.jsp

result

>

action

>

package

>

處理邏輯通過method方法指定,其中名為login的action對應的處理邏輯為預設的execute方法,而名為registry的action對應的處理邏輯則為method指定的registry方法。

三、萬用字元方式(官網推薦使用)

在配置元素時,需要指定name、class、method等屬性,這3個屬性都支援萬用字元,在使用萬用字元定義action的name屬性時,相當於乙個元素action定義多個邏輯action。

第一種方法中的action配置可以更改為:

<

package

name

=」demo」

extends

=」struts-default」

>

<

action

name

=」*action

class

=」com.demo.loginaction」

method

=」」>

<

result

name

=」input」

>/input.jsp

result

>

<

result

name

=」error」

>/error.jsp

result

>

<

result

name

=」success」

>/success.jsp

result

>

action

>

package

>

上述定義不是定義了乙個普通的action,而是定義一系列的action,只要使用者請求的url滿足*action的模式,都可通過該action進行處理,而method屬性使用了乙個表示式{1},該表示式的值就是name屬性中第乙個*的所代表的值,例如,使用者請求的url為loginaction,則*所代表的是login字串,故呼叫com.demo.loginaction類的login方法來處理。如果請示的url為registryaction的話,則呼叫com.demo.loginaction的registry方法進行處理。

以下配置在class屬性中使用萬用字元:

<

package

name

=」demo」

extends

=」struts-default」

>

<

action

name

=」*action」

class

=」com.demo.action」

>

<

result

name

=」input」

>/input.jsp

result

>

<

result

name

=」error」

>/error.jsp

result

>

<

result

name

=」success」

>/success.jsp

result

>

action

>

package

>

此配置中沒有指定method屬性,所以請示由預設的execute方式來執行,但class中使用了萬用字元,它的含義與上面一樣,例如,當使用者請求的為loginaction時,其中*的值為login,該值傳入class屬性,即該action的處理類為com.demo.loginaction;而如果請求為registryaction時,則該action的處理類將變為com.demo.registryaction。

struts2允許在class屬性和method屬性中同時使用表示式,示例如下:

<

action

name

=」*_*」

class

=」com.demo.

method

=」」

/>

只要滿足*_*模式的action都會被其處理,例如有order_booking請求到來,由於第乙個*的值為order,第二個*的值為booking,那麼意味著將會呼叫com.demo.order處理類中的booking方法來處理使用者請求。

struts2在元素中也可以使用表示式,如下:

<

action

name

=」*action」

class

=」com.demo.action

method

=」」

>

<

result

name

=」success」

>/.jsp

result

>

action

>

當請求為loginaction時,將呼叫com.demo.loginaction處理類中的login方法處理使用者的請求,當返回為success時,顯示/login.jsp頁面。

注意:在使用萬用字元後,除非請求的url與action的name屬性絕對相同,否則將按action在struts.xml中定義的先後順序來決定由哪個action來處理使用者請求。

struts2裡同包與不同包的action之間跳轉

有關struts2中action間的跳轉可分為兩部分,一部分為同乙個包中action間的跳轉,還有乙個就是在不同包中action間的跳轉。不管是不是在同乙個包中,首先要明確的是要實現跳轉,必須要將result中type屬性設為chain或redirectaction。一 同乙個包中的跳轉 在acti...

Struts2萬用字元 Struts2動態方法呼叫

形式一 呼叫相同action中的不同方法 login.jsp error.jsp welcome.jsp 其中表示式的值name屬性值中第乙個 的值。如果使用者請求的url為loginaction.action,則呼叫jcuckoo.loginregistaction中的login方法 如果使用者請...

Struts2動態方法呼叫

第一種 index.jsp中 struts.xml中 registaction中 通過表單中form裡action 號前面的rgistaction 去配置檔案裡找到action name registaction 然後找到對應的class new乙個例項出來最後呼叫!號後面的login方法。第二種 ...