S2JSF1.1での例外発生について2

昨日のエントリの続報です。
■[S2JSF]S2JSF1.1で例外が...
http://d.hatena.ne.jp/wataka/20060807#1154924242


S2JSF1.0からS2JSF1.1への移行を試していて、
昨日例外エラーが出てから調査していたのですが、発生パターンが特定できました。

  • Actionにて、インスタンス管理がsessionになっているdtoに対するgetterを定義すると発生する。

といった内容です。

詳細として、S2JSF Example 1.1.0 Beta2(http://s2jsf.seasar.org/download/2006-08-05/s2-jsf-example-1.1.0-beta-2.zip)を例にすると、
 
ProcessModeDto.java はそのまま

public class ProcessModeDto {
    public static final String COMPONENT = "instance = session"; //インスタンス管理がsession
    private int processMode;
    public int getProcessMode() {
        return processMode;
    }
    public void setProcessMode(int processMode) {
        this.processMode = processMode;
    }
}

EmployeeEditInitActionImpl.javaに、ProcessModeDtoのgetterを追加

	private ProcessModeDto processModeDto;
	public void setProcessModeDto(ProcessModeDto processModeDto) {
		this.processModeDto = processModeDto;
	}
	//このgetterを追加する。
	public ProcessModeDto getProcessModeDto() {
		return processModeDto;
	}

この状態で、exampleの『Employee Management』から、『create』ボタンを押すと例外が発生するようです。

java.lang.UnsupportedOperationException: getInstanceDef
	at org.seasar.framework.container.impl.SimpleComponentDef.getInstanceDef(SimpleComponentDef.java:326)
	at org.seasar.jsf.util.InvokeUtil.exportVariables(InvokeUtil.java:169)
	at org.seasar.jsf.util.InvokeUtil.invoke(InvokeUtil.java:73)
	at org.seasar.jsf.runtime.ViewRendererImpl.executeInitAction(ViewRendererImpl.java:151)
	at org.seasar.jsf.runtime.ViewRendererImpl.renderView(ViewRendererImpl.java:92)
	at org.seasar.jsf.application.S2ViewHandler.renderView(S2ViewHandler.java:123)
	at org.seasar.jsf.lifecycle.LifecycleImpl.render(LifecycleImpl.java:190)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:80)

getterを付ける・付けないの判断は、メーリングリスト
[Seasar-user:2720] [S2JSF] HttpServletRequest の自動バインディングを行うとエラー
http://lists.sourceforge.jp/mailman/archives/seasar-user/2005-October/004469.html

をみて、application(ServletContext)やsession(HttpSession)に対してgetterを付けるのは注意していたのですが、
それ以外は何も考えずにsetter/getterを付けていました。

html側でも #{processModeDto.processMode} のような使い方をしているので、getterは必須かと思っていました。

このほかにも、

public static final String hogeDto_EXPORT = "session";

といった書き方も結構使っているので、この場合もgetter不要なのか?も調査が必要です。