[Seasar-user:5538] [S2JSF+Teeda] 複数のforEach構文における参照が不正になる

Kaisei HAMAMOTO [E-MAIL ADDRESS DELETED]
2006年 12月 20日 (水) 03:50:17 JST


浜本です。

S2JSF1.1.0 を引き続き試用中ですが、以下のような問題が発生します。

【症状】
『同一の補助変数名を使った複数の forEach 構文』及び『サブミットボタン』を
組み合わせたページにおいて、forEach 構文の補助変数参照が不正となる場合がある。

【再現例】
1. s2jsf-example 1.1.0 を起動する。
2. /src/main/webapp/foreach2/forEach2List.html 内に以下の記述を加える。

<span m:inject="s:forEach" m:items="#{forEachDtoList}" m:var="e">
  <span m:rendered="#{e.key != null}">
    <span m:value="#{e.key}"/>
  </span>
</span>

※ 補助変数名を "e" 以外にすると再現しません。

3. ブラウザから "ForEach2" メニューにアクセスする。
4. "add row" ボタンを 1 回クリックし、表示要素を 1 つ追加する。
5. "delete3" 桁のチェックボックスを 1 つ以上選択し、"update" ボタンを
クリックする。
6. 以下の例外が発生する。

org.seasar.framework.beans.PropertyNotFoundRuntimeException:
  [ESSR0065]クラス(examples.jsf.dto.ForEach2Dto)のプロパティ(key)が見つかりません
org.seasar.framework.beans.impl.BeanDescImpl.getPropertyDesc(BeanDescImpl.java:126)
org.seasar.jsf.el.S2PropertyResolver.getProperty(S2PropertyResolver.java:202)
org.seasar.jsf.el.S2PropertyResolver.getValue(S2PropertyResolver.java:56)
org.seasar.teeda.core.util.PropertyResolverUtil.getValue(PropertyResolverUtil.java:32)
org.seasar.teeda.core.el.impl.commons.ComplexValueReplacer$JsfPropertySuffix.evaluate
(ComplexValueReplacer.java:128)
org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
org.apache.commons.el.BinaryOperatorExpression.evaluate(BinaryOperatorExpression.java:154)
org.seasar.teeda.core.el.impl.commons.CommonsExpressionProcessorImpl.evaluate
(CommonsExpressionProcessorImpl.java:92)
org.seasar.teeda.core.el.impl.ValueBindingImpl.getValue(ValueBindingImpl.java:68)
javax.faces.component.UIComponentBase.getValueFromBinding(UIComponentBase.java:194)
javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:164)
javax.faces.webapp.UIComponentTag.isSuppressed(UIComponentTag.java:330)
javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:169)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:224)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.ElementProcessor.process(ElementProcessor.java:93)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:225)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:196)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.InsertProcessor.process(InsertProcessor.java:83)
org.seasar.jsf.processor.InsertProcessor.process(InsertProcessor.java:73)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:225)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.ElementProcessor.process(ElementProcessor.java:93)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:225)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.ElementProcessor.process(ElementProcessor.java:93)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:225)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.ElementProcessor.process(ElementProcessor.java:93)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:225)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.ElementProcessor.process(ElementProcessor.java:93)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processTag(TagProcessorImpl.java:225)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:217)
org.seasar.jsf.processor.ElementProcessor.process(ElementProcessor.java:93)
org.seasar.jsf.processor.TagProcessorImpl.processChildren(TagProcessorImpl.java:269)
org.seasar.jsf.processor.TagProcessorImpl.processBodyTag(TagProcessorImpl.java:243)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:213)
org.seasar.jsf.processor.TagProcessorImpl.process(TagProcessorImpl.java:196)
org.seasar.jsf.processor.ViewProcessor.process(ViewProcessor.java:174)
org.seasar.jsf.processor.ViewProcessor.process(ViewProcessor.java:172)
org.seasar.jsf.runtime.ViewRendererImpl.renderView(ViewRendererImpl.java:102)
org.seasar.jsf.application.S2ViewHandler.renderView(S2ViewHandler.java:123)
org.seasar.jsf.lifecycle.LifecycleImpl.render(LifecycleImpl.java:197)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:100)
examples.jsf.util.RequestDumpFilter.doFilter(RequestDumpFilter.java:66)
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)

以上、よろしくお願いいたします。



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