[Seasar-user:7396] [S2JSF]行数が一致するDtoのリストを更新する場合でも、Dtoがrequestスコープの場合にエラー

Scientia 平塚 智之 [E-MAIL ADDRESS DELETED]
2007年 4月 23日 (月) 17:11:12 JST


平塚@サイエンティアです。お世話になります。

先日、弊社斎藤の問い合わせに対し、ひがさんより以下のような回答をいただき
ました。

[Seasar-user:6576] Re: [S2JSF] 複数行一括更新用DTOの持たせかたについて
> ForEachでリストを更新するときは、
> レンダリングされたときとサブミットされたときで、
> 行数が一致する必要があります。
>
> それさえ、OKならリクエストにおいても大丈夫ですが、
> 一般的にはそうはならないケースが多いのではないかと
> 思います。

これを受けて、レンダリング時とサブミット時で行数が一致するように
requestスコープのDtoを実装し、更新処理の動作を確認してみたところ、
更新処理に入る前に、以下のような例外が発生してしまいます。

--------------------------------------------------
javax.servlet.ServletException: Base is null: elements
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:92)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)

javax.faces.el.PropertyNotFoundException: Base is null: elements
	org.seasar.teeda.core.el.impl.commons.CommonsExpressionProcessorImpl.resolveBase(CommonsExpressionProcessorImpl.java:140)
	org.seasar.teeda.core.el.impl.ValueBindingImpl.getType(ValueBindingImpl.java:159)
	org.seasar.teeda.core.util.RendererUtil.getValueType(RendererUtil.java:298)
	org.seasar.teeda.core.util.RendererUtil.findConverter(RendererUtil.java:280)
	org.seasar.teeda.core.util.RendererUtil.getConvertedUIOutputValue(RendererUtil.java:237)
	org.seasar.teeda.core.render.AbstractRenderer.getConvertedValue(AbstractRenderer.java:62)
	org.seasar.jsf.util.RenderUtil.getConvertedValue(RenderUtil.java:250)
	org.seasar.jsf.component.html.S2HtmlInputText.validate(S2HtmlInputText.java:67)
	javax.faces.component.UIInput.executeValidate(UIInput.java:454)
	javax.faces.component.UIInput.processValidators(UIInput.java:198)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	org.seasar.jsf.component.ForEach.processValidators(ForEach.java:184)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.ComponentUtil_.processAppropriatePhaseAction(ComponentUtil_.java:49)
	javax.faces.component.UIForm.processAppropriateAction(UIForm.java:85)
	javax.faces.component.UIForm.processValidators(UIForm.java:73)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:435)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:104)
	org.seasar.jsf.component.S2UIViewRoot.processValidators(S2UIViewRoot.java:68)
	org.seasar.jsf.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:161)
	org.seasar.jsf.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:99)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:87)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)
	org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)
--------------------------------------------------

"elements"は、forEachのm:varで指定した属性値です。

app.diconで、このDtoのスコープをSessionにすると例外は発生しません。
(ですがこれは、意図している設定ではないので、NGです)

ちなみに、配布されているforEachのサンプルでは、Dtoがrequestスコープでも
更新処理を実行できることを確認しています。

確認している環境は、Seasar2.4.7 + S2JSF1.1.1です。

情報をお持ちの方、何卒ご教示ください。

-- 
株式会社サイエンティア 研究開発部 平塚 智之





Seasar-user メーリングリストの案内