kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

S2Struts1.2でポップアップ画面を開く時のActionでメソッド指定はどうする?

S2StrutsでAction内にメソッドが1つしかない場合は、
URLを〜.doで指定すればよいけども
以下のようにAction内にメソッドが複数ある場合での、
ポップアップでウィンドウを開く際のURLの指定の仕方がわかりません。
submitやlinkのように
#{actionのコンポーネント名.メソッド名}
という指定はどうやってやる?
そもそもポップアップでは複数メソッドという実装をしない方がよいのか。
1つのメソッドにしてパラメータで分けるという方法もあるけど、
あまりスマートじゃないな〜と思った。
使用しているバージョンは1.2。

public interface PopUpAction{
  
  String goPopUpA();

  String goPopUpB();

}

public class PopUpActionImpl implements  PopUpAction{
  
  public String goPopUpA(){
     return "a";
  }

  public String goPopUpB(){
     return "b";
  }
}

の場合で、struts-config.xmlに上記のインターフェイスを指定して

 <action path="/PopUp" name="xxxDto"
   type="xxx.PopUpAction"
           validate="false">
            <forward name="a" path="A.jsp" />
            <forward name="b" path="B.jsp" />
 </action>

やり方がスマートかどうかわからないけども
http://www.smallstyle.com/20041227.html
のように

 <script language="JavaScript">
  function windowOpen() {
  window.open("","targetName","toolbar=no,location=no,menubar=no",height=500,width=500);
 }
 //-->
 </script>
  
 <html:form action="/PopUp" onsubmit="windowOpen()" target="targetName">
 ・・・・
 <s2struts:submit action="#{popUpAction.goPopUpA}" value="Aのぽっぷあっぷ" title="Aopen"/>
 <s2struts:submit action="#{popUpAction.goPopUpB}" value="Bのぽっぷあっぷ" title="Bopen"/>
 </html:form>

とやるべき?


2008-12-03追記
S2Strutsのドキュメントの真ん中あたりの
http://s2struts.seasar.org/ja/1.2/s2struts.html#POJOAction

インターフェースのメソッドが複数存在する場合には、
org.apache.struts.actions.DispatchActionを使用する場合と同様に、
struts-config.xmlのactionタグにparameter属性の追加と、
JSPのサブミットボタンに対し、name属性とvalue属性の2つの属性で、
メソッドを指定して下さい。

とあるので、ドキュメントにならい
struts-config.xml

 <action path="/PopUp" 
         name="xxxDto"
         type="xxx.PopUpAction"
         parameter="command"
         validate="false">
         <forward name="a" path="A.jsp" />
         <forward name="b" path="B.jsp" />
 </action>

リクエストURLは
〜.do?command=goPopUpA などとすればよい?

2008-12-15 14:00追記
DispatchActionのようにすぐ↑のstruts-config.xmlのように、parameter="command"として
Actionのメソッド名を指定(〜.do?command=goPopUpA)すれば呼び出せます。
しかし、同じActionに対して、htmlのS2Strutsのsubmitタグで

とすると、actionのメソッドが実行できない。Actionのインスタンス生成やPOJOFormのDIまでは
できるが、それ以降が実行されない。
で、ドキュメントのhttp://s2struts.seasar.org/ja/1.2/s2struts.html#POJOActionにある通り

<html:submit property="command"><bean:message key="toLowerCase"/></html:submit>

と指定すれば

<input type="submit" name="command" value="toLowerCase">

とhtmlがはきだされるみたいなので、submitタグを使用する場合は、こうゆう対応をする必要がある。