我的应用程序是使用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请求。
答案 0 :(得分:1)
此行为的原因是已优化的生命周期,用于某些组件,包括table和panelAccordion。他的意思是这些值只在组件的边界内提交。在您的情况下,这意味着只提交showDetailItem。
要提交表单,您必须设置id,如果链接作为表单的部分触发器。
详细说明可在第17课的演示文稿http://de.slideshare.net/mobile/stevendavelaar/18-invaluable-lessons-about-adfjsf-interaction中找到
答案 1 :(得分:0)
也许尝试将面板集合放在子表单中?