Чтобы лучше прочитать содержимое ячейки в dataTable, я использовал commandLink, чтобы вызвать диалоговое окно.
Это прекрасно работает, пока sortOrder для dataTable установлен в восходящий.После использования sortOrder desc и нажатия на commandLink, диалоговое окно выводит результат элемента, который был бы там, если бы sortOrder был восходящим (другими словами, в desc dataTable -8,7, ...., 2,1- с 8 строками, нажатие на строку с id = 2 вызовет содержание строки id = 7).
Что вызывает эту путаницу в идентификаторах?Разве я временно не сохраняю фактически нажатый на элемент в бэк-компоненте, на который не должен влиять sortOrder?Есть ли лучшая практика для того, чего я пытаюсь достичь?
PF версии 5.3, JSF 2.2.7
dataTable и диалоговое окно
<p:dataTable id="improvementTable" var="improvement" widgetVar="improvementsTable" value="#{Controller.improvements}" sortBy="#{improvement.id}" sortOrder="descending">
<p:column headerText="ID">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{improvement.id}" />
</f:facet>
<f:facet name="input">
<p:inputText id="modelInput" value="#{improvement.id}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column>
<p:commandLink id="detailOut" value="#{improvement.detail}" action="#{Controller.setSelectedImprovement(improvement)}" process="@this" oncomplete="PF('wDetail').show();" update=":dlgDetail" />
</p:column>
</p:dataTable>
</h:form>
<p:dialog id="dlgDetail" widgetVar="wDetail">
<h:outputText value="#{Controller.selectedImprovement.detail}" />
</p:dialog>
В компоненте
@ManagedBean (name="Controller")
@RequestScoped
public class Controller{
private List<Improvement> improvements;
private Improvement selectedImprovement;
@PostConstruct
public void load() {
CIMImprovementDao cimDao = new CIMImprovementDao();
improvements = cimDao.getAll();
}
public List<Improvement> getImprovements() {
return improvements;
}
public Improvement getSelectedImprovement() {
return selectedImprovement;
}
public void setSelectedImprovement(Improvement selectedImprovement) {
this.selectedImprovement = selectedImprovement;
}
}