【问题标题】:To do ajax refresh of JSF/primefaces datatable对 JSF/primefaces 数据表进行 ajax 刷新
【发布时间】:2013-09-07 23:59:38
【问题描述】:

我正在尝试在单击命令链接时对数据表执行 JSF/primefaces ajax 更新,我使用该命令链接删除记录。单击命令链接时,我的数据库会更新但数据表不会刷新,即使我使用 update="@form" 属性。任何有关如何解决此问题的指导都会非常有帮助。

我的 JSF 代码 sn-p 这是一个包含几列的行可编辑数据表 像州,地区如下

<h:form id="lpcForm">

    <div id="content">
        <p:commandLink id="cmdLinkDelete" value="Delete" ajax="true"
            action="#{lpcBean.deleteRecords}" update="lpcDataTable" />

        <p:dataTable var="lpcData" id="lpcDataTable" widgetVar="lpcTable"
            value="#{lpcBean.lpcIdList}" selection="#{lpcBean.selectedRows}"
            editable="true" scrollable="true" scrollWidth="1110"
            scrollHeight="330" styleClass="datatable" resizableColumns="true">
            <p:ajax event="rowEdit" listener="#{lpcBean.onEdit}" />
            <p:ajax event="rowEditCancel" listener="#{lpcBean.onCancel}" />

            <p:column selectionMode="multiple" style="width:15px" />

            <p:column headerText="LPC ID" style="width:20px">
                <h:outputText value="#{lpcData.LPCID}" />
            </p:column>

            <p:column headerText="Region" style="width:40px">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{lpcData.region}" />
                    </f:facet>
                    <f:facet name="input">
                        <h:selectOneMenu value="#{lpcData.region}">
                            <f:selectItems value="#{lpcBean.regions}" />
                        </h:selectOneMenu>
                    </f:facet>
                </p:cellEditor>
            </p:column>


            <p:column headerText="State" style="width:15px">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{lpcData.homeState}" />
                    </f:facet>
                    <f:facet name="input">
                        <h:selectOneMenu value="#{lpcData.homeState}">
                            <f:selectItems value="#{lpcBean.mainStates}" />
                        </h:selectOneMenu>
                    </f:facet>
                </p:cellEditor>
            </p:column>

            .
            .
            .

            <p:column style="width:10px">
                <p:rowEditor />
            </p:column>

        </p:dataTable>

    </div>
</h:form>

变量lpcIdList是实现DataModel的类的类型。

下面是包含 deleteRecords 方法的托管 bean sn-p。托管 bean 属于 RequestScoped

public String deleteRecords()
{
    System.out.println("inside delete records");
    System.out.println("Selected rows length:"+ selectedRows.length);
    for(LPC itemSelect:selectedRows)
    {
        String lpcId=itemSelect.getLPCID();
        JdbcConnection jdbcConnection=new JdbcConnection();
        connection=jdbcConnection.getJdbcConnection();
        try{
            preparedStmt=connection.prepareStatement("delete from LPC where LPCID=?");
            preparedStmt.setString(1, lpcId);
            preparedStmt.execute();

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }


    }
    return null;


}

变量selectedRows是数据表的选择属性

从数据库中获取数据的getLpcFields方法

public void getLpcFields() {

    try
    {

        JdbcConnection jdbcConnection =new JdbcConnection();
        connection=jdbcConnection.getJdbcConnection();
        System.out.println("connected to the database");

        selectStmt1 = connection.createStatement();
        ResultSet rs1 = selectStmt1.executeQuery("select * from LPC order by LPCID");


        while(rs1.next()){


            lpcItems.add(new LPC(rs1.getString("LPCID"),rs1.getString("Name_First"),rs1.getString("Name_Last"),rs1.getString("Email_Address"),rs1.getString("Region"),
                    rs1.getString("HomeState"),rs1.getString("ProfitCenter"),rs1.getString("Active_LPC"),rs1.getString("Name")));
        }
        selectStmt2=connection.createStatement();
        ResultSet rs2=selectStmt2.executeQuery("Select * from Tbl_state");


        while(rs2.next())
        {
            mainStates.add(rs2.getString("State"));

        }
        selectStmt3=connection.createStatement();
        ResultSet rs3=selectStmt3.executeQuery("Select * from Tbl_Regional_Managers");

        while(rs3.next())
        {
            regions.add(rs3.getString("Location"));
        }
        selectStmt4=connection.createStatement();
        ResultSet rs4=selectStmt4.executeQuery("Select * from YesNo order by YesNo_Key desc");



        while(rs4.next())
        {
            activeLpcs.add(rs4.getString("Description"));
        }


    }
    catch (Exception e)
    {

        e.printStackTrace();
    }
    finally
    {
        try {

            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


}

【问题讨论】:

  • 请发帖lpcBean.getLpcIdData
  • @user1983983,抱歉回复晚了。我已经包含了我编辑的问题
  • 数据正在从数据库中删除,但您是否更新了保留数据表值的lpcIdList 变量?

标签: ajax jsf-2 primefaces


【解决方案1】:

Xtreme Biker 的回答是正确的 (h/t)。您需要清除 lpcIdList 中的包装数据。根据您实现代码的方式,您将需要填充新列表或从现有列表中删除该项目。然后就可以使用ListDataModelsetWrappedData()方法了。

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2018-03-11
    • 2013-09-12
    • 2014-06-11
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多