struts 2 struts.xmlはワイルドカードを使用します.

3609 ワード

5.4.1  ワイルドカードを使う
前に勉強したことがありますが、「action」要素のname属性を定義する際にワイルドカードを使ってもいいです.この「action」要素は一つのURLだけでなく、一つのURLにもマッチします.actionのclass属性とmethod属性はワイルドカードの値を使用できます.以下の構成を使用すると、
javaコード:
クリップボードにコピーした印刷を表示します.
<action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
            <result name="toWelcome">/s2impl/welcome.jsp</result>  
</action> 
上の配置で:
{1}最初の*に対応するマッチング、{2}は第二の*にマッチする.
       name属性の値の中で「*」は、長さが0でない任意の文字列を表します.したがって、そのactionは名前の中に下線があるだけでいいです.
       ハローワールドを使えばcreat.actionを訪問するactionの名前とすると、struts.xmlのactionの名前はハロルド(u)です.create、最初のワイルドカードはハロルドにマッチし、二つ目のワイルドカードはcreateにマッチします.したがって、cn.javass.actions.Hello World Actionのcreate方法で応答する.
       では、「result」要素に対しても、「action」要素のname属性定義のワイルドカードを使ってもいいですか?答えは大丈夫です.次のような構成があれば、
javaコード:
クリップボードにコピーした印刷を表示します.
<action name="*_*_*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
     <result name="{3}">/${folder}/{4}.jsp</result>  
</action>  
もちろん、この時のアクションもそれなりの変化をして、アクションにロゴを追加する方法は、この方法の中でfolderに値を付けます.サンプルコードは以下の通りです.
javaコード:
クリップボードにコピーした印刷を表示します.
public class HelloWorldAction extends ActionSupport {  
    private String account;  
    private String password;  
    private String submitFlag;  
    private String folder;  
    public void setFolder(String folder){  
        this.folder = folder;  
    }  
    public String getFolder(){  
        return folder;  
    }  
      
    public String login(){  
        System.out.println("  Login   ");  
        this.folder = "s2impl";  
        return "toLoginOk";  
    }  
      
    public String execute() throws Exception {  
        this.businessExecute();  
        this.folder = "s2impl";  
        return "toWelcome";  
    }  
    /** 
     *     ,                
     */  
    public void businessExecute(){  
        System.out.println("        ==="+"account="+account+",password="+password+",submitFlag="+submitFlag);  
    } 
    //     getter/setter  ,     
}   
struts.xmlの構成が変化しました.特にアクション名の構成が変化しました.ログインページも対応する変化が必要です.コード例は以下の通りです.
javaコード:
クリップボードにコピーした印刷を表示します.
<form action="/helloworld/HelloWorld_login_toLoginOk_welcome.action" method="post">  
    <input type="hidden" name="submitFlag" value="login"/>  
      :<input type="text" name="account"><br>  
      :<input type="password" name="password"><br>  
    <input type="submit" value="  ">  
</form>
 
注意:上に配置されている「ハローワーク」は、struts.xmlに対応する場合、四つのパラメータに分けてマッチングされます.内訳:{1}ハロルド対応、{2}対応login、{3}対応toLoging Ok、{4}対応welcome.
       テストしてみます.いいですか?実は、上でワイルドカードを使用した構成は、以下のような構成と等価であり、例は以下の通りである.
javaコード:
クリップボードにコピーした印刷を表示します.
<action name="HelloWorld_login_toLoginOk_welcome" class="cn.javass.action.action.HelloWorldAction" method="login">  
        <result name="toLoginOk">/${folder}/welcome.jsp</result>  
</action> 
つまり、該当するパラメータを対応する位置に設定します.