【发布时间】: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