Я вызываю valueChangeListener
на <h:selectBooleanCheckbox>
, который находится внутри dataTable. и этот dataTable снова находится внутри другого (внешнего) dataTable. В методе valueChangeListener
мне нужен объект экземпляра внешнего dataTable. Есть ли способ получить объект внешнего экземпляра dataTable?
EX:
<h:panelGroup id="panelId">
<p:dataTable id="outerDatatable"
var="supplier"
value="bean.supplierList">
<p:column>
<f:facet name="header">
<h:outputText value="Suppliers" />
</f:facet>
<h:outputText value="#{supplier.name}" />
</p:column>
<p:column>
<p:dataTable id="innerDataTable"
var="supplierAccount"
value="supplier.supplierAccountList">
<p:column>
<h:selectBooleanCheckbox id="booleanBoxId"
value="#{supplierAccount.supported}"
valueChangeListener="#bean.checkBoxListener}"
immediate="true"
onchange="this.form.submit();"/>
</p:column>
</p:dataTable>
</p:column>
</p:dataTable>
</h:panelGroup>
Я нашел следующее решение: я использовал прослушиватель <p:ajax>
вместо valueChangeListener
, и я мог передать объект поставщика, а также объект supplierAccount
этому методу прослушивателя. Мы можем передать любое количество пользовательских объектов слушателю <p:ajax>
.
<p:column>
<h:selectBooleanCheckbox id="booleanBoxId"
value="#{supplierAccount.supported}"
immediate="true">
</h:selectBooleanCheckbox>
<p:ajax listener="#{bean.myListenerMethod(supplier,supplierAccount)}"
update=":formName:panelId"/>
</p:column>