メニュー

2006/12/22修正版
2007/02/12 コード例の修正
2008/03/16 アノテーションの意味が異なっていたのを修正

利用できるアノテーション

S2Flex2で利用できるアノテーションは以下の通りです。

アノテーション

説明

RemotingService

Flex2から呼び出すサービス用アノテーション

Export

データ保存用のアノテーション。Storageで指定したObject(session,request)にデータを保存するアノテーション

Import

データ取得用のアノテーション。Storageで指定したObject(session,request)からデータを取り出してComponentにセットするときに使用するアノテーション

※アノテーションを利用するには、S2Flex2-tigerをクラスパスに含める必要があります。

以下使用例です。

package examples.flex2.add.service.impl;
import java.util.Date;
import org.seasar.flex2.rpc.remoting.service.annotation.RemotingService;
import org.seasar.flex2.util.data.storage.StorageType;
import org.seasar.flex2.util.data.transfer.annotation.Export;
import org.seasar.flex2.util.data.transfer.annotation.Import;

import examples.flex2.add.dto.AddDto;
import examples.flex2.add.service.AddService;


//このRemotingServiceを指定してFlex2クライアントから呼び出せるようにします。
@RemotingService
public class AddServiceImpl implements AddService {
	private AddDto addDto;
           
	public int calculate(int arg1, int arg2) {
		return arg1 + arg2;
	}


//Sessionに現在のデータをセットするとき
//AddDtoは、Sessionに書かれます。
@Export(storage = StorageType.SESSION)
	public AddDto getAddDto() {
		return addDto;
	}

//Sessionに登録されているデータをBeanのプロパティにセットするとき
//AddDtoはSessionより取得したものがComponentsにセットされます。
@Import(storage = StorageType.SESSION)
	public void setAddDto(AddDto addDto) {
		this.addDto = addDto;
	}
}
       

ログインした情報を保持するようなケース

以下はログインした際に、Sessionにログインした情報をセットし、ほかのサービスでそのログイン情報を利用するようなケースの使用例です。
LoginServiceで、ログインした情報を保持しておき、ProductsSevriceでは、そのログイン情報をもとに処理を切り替えます。

1.Sessionにログイン情報を保持する

まず最初にLoginServiceにExportアノテーションを記述します。
ログインした情報は、Sessionに保持されるようになります。s

	public Class LoginServiceImpl implements LoginService {
	
		//ログイン結果はSessionに保存します。
		
		//getMethodに@Exportがあると、SessionにComponentsを保存します。
	    @Export(storage=StorageType.SESSION)
	    public LoginInfo getLoginInfo(){
	    	return loginInfo;
	    }
	    
		private LoginInfo loginInfo;
		
		public LoginInfo doLogin(String id,String pass){
				:
				:
				loginInfo = new LoginInfo();
				loginInfo.name="Hoge";
				
		}
	}
		

2.Sessionに保持した情報を利用する

LoginServiceで保持したLogin情報(LoginInfo)をサービス内で利用して処理を切り分けています。

	public Class ProductServiceImpl implements ProductsService {
		private LoginInfo loginInfo;
		
		//SessionよりLoginInfoを取得してセットする。
		@Import(storage=storageType.SESSION)
		public void setLoginInfo(LoginDto loginInfo){
			this.loginInfo=loginInfo;
		}
		
		public List<Products> getProducts(){
			//Sessionにあるログイン情報をもとに処理判定をします。
			if(loginInfo.name.equals("Hoge")){
				return new List<Products>();
			}else{
				return null;
			}
		}
	}

JDK1.4で利用するには。

JDK1.4でS2Flex2を利用するときには、定数アノテーションを利用して指定することができます。定数アノテーションとして、用意しているのは以下のとおりです。

アノテーション

説明

REMOTING_SERVICE

Flex2から呼び出すサービスを示す定数アノテーション。
Stringで指定します。

$変数名_EXPORT

sessionにデータを保存するときに利用する定数アノテーション。
Stringで指定します。値は、Storageを指定します。

$変数名_IMPORT

sessionからデータを取得するときに利用する定数アノテーション。
Stringで指定します。値は、Storageを指定します。

storageには、org.seasar.flex2.util.data.storage.StorageTypeで定義されているものを利用します。
現在の所以下の2つを用意しています。

  • org.seasar.flex2.util.data.storage.StorageType.SESSION
  • org.seasar.flex2.util.data.storage.StorageType.REQUEST

現状ではStorageType.SESSIONを使うのが効果的です。

使用例

//For JDK1.4 Field Annotations.
//値は特に問いませんが、service名称をそのまま指定しておきます。
public static final String REMOTING_SERVICE = "testRemotingService";

//sessionにデータを保存するとき
public static final String strData_EXPORT = StorageType.SESSION;
//sessionから取得したデータをセットするとき
public static final String strData_IMPORT = StorageType.SESSION;
//sessionデータバインディング対象プロパティ
private String strData;