Доступ к элементу DataTable возвращает неверно выбранный элемент при изменении порядка - PullRequest
0 голосов
/ 23 мая 2018

Чтобы лучше прочитать содержимое ячейки в 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;
    }

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...