Ho un <p:dataTable>
con carico pigro. In due delle colonne, c'è uno <p:selectOneMenu>
in ciascuna di esse.Popolare p: selectOneMenu basato su un altro p: selectOneMenu in ogni riga di un p: dataTable
La prima colonna contiene un elenco di paesi e il secondo contiene un elenco di stati da un database.
Voglio il secondo menu (quello che contiene un elenco di stati) per visualizzare solo quegli stati in ogni riga della tabella di dati che corrispondono al paese nel primo menu a ogni riga dei dati tavolo.
Durante la modalità di modifica, quando viene modificato un Paese nel suo menu, gli stati corrispondenti a tale paese devono essere compilati nel relativo menu in quella riga corrente.
Come caricare tali elenchi di stati che corrispondono ai rispettivi paesi in ciascuna riga della tabella dati?
Queste due colonne nella tabella di dati non sono complete, poiché non ho un'idea precisa su come ottenere ciò.
<p:column>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{row.state.country.countryName}"/>
</f:facet>
<f:facet name="input">
<p:selectOneMenu value="#{row.state.country}">
<f:selectItems var="country"
value="#{cityBean.selectedCountries}"
itemLabel="#{country.countryName}"
itemValue="#{country}"/>
<p:ajax update="states" listener="#{cityBean.getStates}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{row.state.stateName}"/>
</f:facet>
<f:facet name="input">
<p:selectOneMenu id="states">
<f:selectItems var="state"
value="#{cityBean.selectedStates}"
itemLabel="#{state.stateName}"
itemValue="#{state}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
cityBean.selectedCountries
recupera tutti i paesi che è necessario, ma cityBean.selectedStates
recupera anche tutti gli stati dal database, che non è necessario e deve essere modificato in modo da recuperare solo quegli stati che corrispondono al suo paese in un altro menu.
Come posso procedere da qui?
Ecco dove approfitti della tua classe ausiliaria. Il tuo 'countryId' non si trova direttamente nel tuo bean gestito, ma nella tua classe ausiliaria (ricorda che la lista che usi per costruire la tabella è composta da questi ausiliari). Poi hai il listener di eventi ajax (questo va nel MB) che riceverà la riga che è stata cambiata. Il MB prende solo l'oggetto ausiliario che è stato cambiato (il suo 'countryId') e carica il suo elenco di stato aggiornato che entra nell'ausilio. –