mam tę prostą stronę:Primefaces DataTable, leniwy załadunku i CommandButton za rzędzie
<h:form id="form">
<p:dataTable value="#{testBean.unitTypeModel}" var="elem" lazy="true" rows="10">
<p:column headerText="class">#{elem.class.simpleName}</p:column>
<p:column headerText="code">#{elem.code}</p:column>
<p:column headerText="description">#{elem.description}</p:column>
<p:column headerText="action">
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench" value="edit">
<f:setPropertyActionListener target="#{testBean.selection}" value="#{elem}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench"/>
</h:form>
i tym CommandButton
wewnątrz DataTable
nie pracuje, tylko odświeża stronę. , ale ten na zewnątrz działa.
jeśli zmienię value
i lazy
ten sposób:
<h:form id="form">
<p:dataTable value="#{testBean.unitTypeModel.load(0, 10, null, null, null)}" var="elem" lazy="false" rows="10">
<p:column headerText="class">#{elem.class.simpleName}</p:column>
<p:column headerText="code">#{elem.code}</p:column>
<p:column headerText="description">#{elem.description}</p:column>
<p:column headerText="action">
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench" value="edit">
<f:setPropertyActionListener target="#{testBean.selection}" value="#{elem}"/>
</p:commandButton>
</p:column>
</p:dataTable>
<p:commandButton action="test2" icon="ui-icon ui-icon-wrench"/>
</h:form>
CommanButton
wewnątrz DataTable
działa jak czar.
ktoś wie, dlaczego?
czy to błąd?
jestem na
- GlassFish 3.1.2
- JSF 2.1.11 (Mojarra)
- PrimeFaces 3,4-SNAPSHOT
To nie jest do końca prawda: Jest to pomocne, jeśli ta sama instancja 'LazyDataModel' znajduje się w sesja przy użyciu '@ ViewScoped', ale możesz także użyć' @ RequestScoped'. Chodzi o to, że metoda 'isRowAvailable()' musi zwracać wartość true, gdy jest oceniana w 'APPLY_REQUEST_VALUES', a pole' pageSize' musi zawierać wartość większą od zera. Osiągnąłem to poprzez rozszerzenie 'LazyDataModel' podczas przeciążania dwóch metod:' isRowAvailable() ', tutaj nazywam' load (...) 'i stosuję wynik do' setWrappedData() 'i drugiej metody' setRowIndex (int rowIndex) 'gdzie ustawiłem' pageSize' na moje domyślne – uvo