[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 メーリングリストの案内