Thursday, 17 January 2008

Passing parameter from struts-config ... Custom action-mapping

Farklı ortamlarda aynı war'un çalışması gerekiyordu. Env variable olarak alınabilecek bir parametreyi struts-config üzerinden gönderebilir miyimi düşündüm. custom action-mapping class'ı yazarak bunun yapılabileceğini gördüm.

Yazayım, bir kenarda dursun. Lazım olur. Zaten birkaç basit adımdan oluşuyor.

  • önce custom mapping class'ımızı yazalım:

package xxx.yyy;

import org.apache.struts.action.ActionMapping;

public class CustomActionMapping extends ActionMapping {
private String channelInfo;

public String getChannelInfo() {
return channelInfo;
}

public void setChannelInfo(String channelInfo) {
this.channelInfo = channelInfo;
}


}

Bana bir tane parametre gerektiği için şimdilik channelInfo adında tek bir tane parametre ekledim.

  • ardından struts-config'de tanımladığım <action-mappings> içindeki action tanımlarına, yukarıda yazmış olduğum custom mapping'i göstereyim:

<action path="/dummyAction"
className="xxx.yyy.CustomActionMapping"
...

  • şimdi de custom içindeki ilgili parametreyi struts-config'den istediğim değere set edeyim:

<set-property property="channelInfo" value="CHANNEL1"/>


  • son olarak da action içinde bu değeri nasıl okuyacağıma geldim. Bunun için de action class'ına gelen ActionMapping objesini benim custom mapping'ime cast ediyorum. Ve istediğim parametreyi alıyorum.

CustomActionMapping myMapping = (CustomActionMapping) mapping;
String channelInfo = myMapping.getChannelInfo();

Benim çok işime yaradı. Şimdilik action mapping'de ihtiyacım oldu ama eğer lazım olursa <forward> ve <form-bean> implementasyonlarını da customize edebiliyor olmamız da aklımızın bir kenarında bulunsun.

No comments: