为什么从panelCollection内部提交调用不会从页面的其余部分提交数据更改

时间:2015-02-07 19:34:58

标签: oracle-adf

我的应用程序是使用Oracle ADF 11gR1(JDeveloper 11.1.1.7.0)构建的,我遇到的问题是由commandLink提交的数据放在panelCollection中。 我有以下页面片段结构:

<af:panelAccordion id="pa1">
  <af:showDetailItem id="sdi1">
    <af:panelFormLayout id="panelFormLayout1">
      <af:inputText value="#{bindings.C11.inputValue}" id="it34" />
      <af:inputText value="#{bindings.N04.inputValue}" id="it32" />
      <af:selectOneChoice value="#{bindings.N13.inputValue}" id="soc4" autoSubmit="true" >
        <f:selectItems value="#{bindings.N13.items}" id="si4"/>
      </af:selectOneChoice>
      ...
    </af:panelFormLayout>
  <af:showDetailItem>
  ...
  <af:showDetailItem id="sdi4">
    <af:panelCollection id="pc2">
      <af:table value="#{bindings.Table.collectionModel}"
                var="row" rows="#{bindings.Table.rangeSize}"
                filterModel="#{bindings.Table.queryDescriptor}"
                queryListener="#{bindings.Table.processQuery}"
                varStatus="vs"
                selectedRowKeys="#{bindings.Table.collectionModel.selectedRow}"
                selectionListener="#{bindings.Table.collectionModel.makeCurrent}"
                rowSelection="single" id="t2">
        <af:column id="c19">
          <af:commandLink id="cl1" textAndAccessKey="#{row.bindings.C0.attributeValue}" actionListener="#{pageFlowScope.Bean.handle}"/>
        </af:column>
        <af:column id="c17">
          <af:inputText value="#{row.bindings.C1.inputValue}" id="it17" />
        </af:column>
        <af:column id="c16">
          <af:inputText value="#{row.bindings.C2.inputValue}" id="it42" />
        </af:column>
        ...
      </af:table>
    </af:panelCollection>
  </af:showDetailItem>
</af:panelAccordion>

表列 c19 中的CommandLink( id =“cl1”)定义了 actionListener 。这种方法的执行操作基于表中选定行和上面panelFormLayout控件中给出的数据。

当按下commandLink并触发actionListener方法时,我看到(在结果和调试中)未提交panelFormLayout的数据更改,除了 autosubmit 设置为true的数据。但是如果我在panelCollection之外放置相同的commandLink,那么所有数据都会被提交。

我的问题是当从panelCollection里面触发actionListener时,我怎么能强制从整个pageFragment提交数据?

对于panelCollection之外的所有控件的自动提交似乎不是一个好的解决方案,因为许多不必要的POST请求。

2 个答案:

答案 0 :(得分:1)

此行为的原因是已优化的生命周期,用于某些组件,包括table和panelAccordion。他的意思是这些值只在组件的边界内提交。在您的情况下,这意味着只提交showDetailItem。

要提交表单,您必须设置id,如果链接作为表单的部分触发器。

详细说明可在第17课的演示文稿http://de.slideshare.net/mobile/stevendavelaar/18-invaluable-lessons-about-adfjsf-interaction中找到

答案 1 :(得分:0)

也许尝试将面板集合放在子表单中?