0
私はレポートの行からなるテーブルを持っています。チェック・ボックスの値変更イベントに関連付けられたバック・ビーン・メソッドは、行IDを取得していて、配列(rowsToBeRemoved)にこのIDを移入しています。もう一つの方法は、この配列を取得し、reportlistクラスからオブジェクトを削除します。テーブルが更新されません
ObjectListDataProvider reportList = new ObjectListDataProvider();
List<RowKey> rowsToBeRemoved=new ArrayList();
Integer rowsToBeRemovedIndex = 0;
for(RowKey rowToBeRemoved:rowsToBeRemoved){
try {
System.out.println("rowToBeRemoved.toString()" + rowToBeRemoved.toString()); // outputs: rowToBeRemoved.toString()RowKey[0]
Report report = (Report) reportList.getObject(rowToBeRemoved);
System.out.println("report.getId()" + report.getId()); //outputs: report.getId()199|
Query resultQuery = queryGeneration(report.getId());
List<String> dropTableQueries = resultQuery.getResultList(); // generated the queries to drop r tables
for(int i=0; i<dropTableQueries.size(); i++){
String aDropTableQuery;
aDropTableQuery = dropTableQueries.get(i);
System.out.println("adroptableuery" + aDropTableQuery);// get single drop table query. outputs adroptableueryDROP TABLE r_199_0
entityManager.createNativeQuery(aDropTableQuery);
System.out.println("entitymanager dropTableQueries is invoked");//OK
reportList.removeObject(rowToBeRemoved);
System.out.println("removeObject");//OK
if (reportList.isRemoved(rowToBeRemoved)){
System.out.println("object removed");//OK
}
reportList.commitChanges();
System.out.println("commitchanges");//OK
}
reportJpaController.delete(report);
reportList.removeRow(rowToBeRemoved);
reportList.commitChanges();
analyzerResultService.drop(report.getId().longValue());
//rowsToBeRemoved.remove(rowsToBeRemovedIndex);
} catch (Exception e) {
error("Cannot delete report with row key " + rowToBeRemoved + e);
}
コードが細かい実行し、reportlistからオブジェクトを削除しますが、その後、私のテーブルには、混合reportlistが表示されます。ページを更新すると、レポートリストが正しい順序で表示されます。そうでない場合は表示されません。また、混在状態で行を削除しようとすると、正しい順序であるかのようにレポートが削除され、間違ったレポートが削除されて終了します。私が説明できることを願って..何が間違っているの?
私はAjax4jsfを実装すべきですか? – lamostreta
はい、それは – samn
答えが私に手がかりを与えたかもしれません。 JSFでテーブルの更新に問題がありました。 Ajaxを実装する代わりに、onClick = "setTimeout( '#{user $ recentreports.updateReportList()}'、500}"を私のテーブルに置いて、バックベイですでに定義されたメソッドをトリガーします。 。 – lamostreta