首页 > 解决方案 > 更改订单时访问 DataTable 项返回不正确的选定项

问题描述

为了更好地读取数据表中单元格的内容,我使用了 commandLink 来调出一个对话框。

只要将 dataTable 的 sortOrder 设置为升序,就可以正常工作。在使用 sortOrder desc 并单击 commandLink 时,对话框会显示本来应该存在的项目的结果,如果 sortOrder 一直在升序(换句话说,在 desc dataTable -8,7,....,2, 1- 有 8 行,单击 id =2 的行将显示行 id=7) 的内容。

是什么导致了 ID 混淆?我是否没有暂时将实际单击的项目存储在支持 bean 中,这不应该受 sortOrder 的影响?对于我要完成的工作,是否有更好的做法?

PF 5.3 版,JSF 2.2.7

数据表和对话框

<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;
    }

} 

标签: jsfprimefaces

解决方案


推荐阅读