2011-10-18 2 views
0

보고서 행으로 구성된 표가 있습니다. 선택란 값 변경 이벤트에 연결된 Back Bean 메소드는 행 ID를 가져오고이 ID로 배열 (rowsToBeRemoved)을 채 웁니다. 또 다른 방법은이 배열을 얻고 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을 제공합니다. 페이지를 새로 고치면 올바른 순서로 보고서 목록을 가져오고, 그렇지 않으면 보고서 목록을 가져 오지 않습니다. 그리고 혼합 상태의 행을 삭제하려고하면 보고서가 올바른 순서로 삭제되므로 잘못된 보고서가 삭제됩니다. 나는 내가 설명 할 수 있었으면 좋겠다. 나는 무엇을 잘못하고 있냐?

답변

2

나는 이것이 당신이 찾고있는 것과 비슷한 생각 : 그냥하지만 ​​페이지의 한 부분을 새로 How to refresh entire JSF page from the backing bean

이 나던하지만, 전체 페이지.

+0

당신은 Ajax4jsf를 구현해야한다는 것을 의미합니까? – lamostreta

+0

네, 그게 – samn

+0

답이 나에게 단서를주었습니다. JSF에서 테이블 갱신에 문제점이 있습니다. Ajax를 구현하는 대신에onClick = "setTimeout ('# {user $ recentreports.updateReportList()}', 500}"을 내 테이블에 넣어 백 뱅크에서 이미 정의 된 메소드를 트리거하고 내 문제를 해결했습니다. . – lamostreta

관련 문제