S2JSF1.1での例外発生について2
昨日のエントリの続報です。
■[S2JSF]S2JSF1.1で例外が...
http://d.hatena.ne.jp/wataka/20060807#1154924242
S2JSF1.0からS2JSF1.1への移行を試していて、
昨日例外エラーが出てから調査していたのですが、発生パターンが特定できました。
といった内容です。
詳細として、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不要なのか?も調査が必要です。