struts 2 struts.xmlはワイルドカードを使用します.
3609 ワード
5.4.1 ワイルドカードを使う
前に勉強したことがありますが、「action」要素のname属性を定義する際にワイルドカードを使ってもいいです.この「action」要素は一つのURLだけでなく、一つのURLにもマッチします.actionのclass属性とmethod属性はワイルドカードの値を使用できます.以下の構成を使用すると、
javaコード:
クリップボードにコピーした印刷を表示します.
{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コード:
クリップボードにコピーした印刷を表示します.
javaコード:
クリップボードにコピーした印刷を表示します.
javaコード:
クリップボードにコピーした印刷を表示します.
注意:上に配置されている「ハローワーク」は、struts.xmlに対応する場合、四つのパラメータに分けてマッチングされます.内訳:{1}ハロルド対応、{2}対応login、{3}対応toLoging Ok、{4}対応welcome.
テストしてみます.いいですか?実は、上でワイルドカードを使用した構成は、以下のような構成と等価であり、例は以下の通りである.
javaコード:
クリップボードにコピーした印刷を表示します.
前に勉強したことがありますが、「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>
つまり、該当するパラメータを対応する位置に設定します.