2011-10-17 5 views
0

에서 버튼의 상호 작용이 나는 체크 박스가 있습니다체크 박스와 JSF

그 valueChangeListenerExpression 방법이다
<webuijsf:checkbox immediate="true" valueChangeListenerExpression="#{user$recentreports.selectSingleCBEvent}" id="selectCB" binding="#{user$recentreports.selectCB}" toolTip="#{msg.report_select}"/> 

:

List<RowKey> rowsToBeRemoved=new ArrayList(); 
public void selectSingleCBEvent(ValueChangeEvent event) throws Exception {  
    RowKey rowKey = tableRowGroup.getRowKey(); 
    System.out.println("rowKey" + rowKey); 
    System.out.println("tableRowGroup.getRowKey().toString()" + tableRowGroup.getRowKey().toString()); 
    rowsToBeRemoved.add(rowKey); 
    FacesContext.getCurrentInstance().renderResponse(); 

} 

내가 구성 요소를 선택 체크 박스 행을 삭제하는 데 사용되어야하는 버튼이 있습니다 : 그 뒷면 콩

<webuijsf:button actionExpression="#{user$recentreports.deleteButton_action}" id="deleteButton" text="#{msg.report_delete_selected}"/> 

은 다음과 같습니다

,691,363 이 양식의210
public String deleteButton_action() { 

     for(RowKey rowToBeRemoved:rowsToBeRemoved){ 
      try { 
       System.out.println("rowToBeRemoved" + rowToBeRemoved); 
       GeneratedReport generatedReport = (GeneratedReport) reportList.getObject(rowToBeRemoved); 
       Query resultQuery = queryGeneration(generatedReport.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); // get single drop table query 
        entityManager.createNativeQuery(aDropTableQuery); 
        reportList.removeRow(rowToBeRemoved); 
        reportList.commitChanges(); 
       } 
       generatedReportJpaController.delete(generatedReport); 
       reportList.commitChanges(); 
       analyzerResultService.drop(generatedReport.getId().longValue()); 
      } catch (Exception e) { 
       error("Cannot delete report with row key " + rowToBeRemoved + e); 
      } 
     } 
     return null; 
    } 

출력은 다음과 같습니다

[#|2011-10-17T11:47:14.304+0300|INFO|glassfishv3.0|null|_ThreadID=25;_ThreadName=Thread-1;|rowKeyRowKey[0]|#] 

[#|2011-10-17T11:47:14.304+0300|INFO|glassfishv3.0|null|_ThreadID=25;_ThreadName=Thread-1;|tableRowGroup.getRowKey().toString()RowKey[0]|#] 

[#|2011-10-17T11:47:14.304+0300|INFO|glassfishv3.0|null|_ThreadID=25;_ThreadName=Thread-1;|rowKeyRowKey[1]|#] 

[#|2011-10-17T11:47:14.304+0300|INFO|glassfishv3.0|null|_ThreadID=25;_ThreadName=Thread-1;|tableRowGroup.getRowKey().toString()RowKey[1]|#] 

내 deleteButtonAction에 도달하지만 (rowsToBeRemoved에서 rowKey을 얻고을 삭제) 쓰기 작업을 수행하지 않는 것을 의미한다, 나는 이유를 이해하지 않습니다 . 백 콩은 어떤 범위의 요청입니까?

답변

1

내 생각에 selectSingleCBEvent에서 FacesContext.getCurrentInstance() .renderResponse()를 호출하여 JSF 라이프 사이클을 누락시키고 있으며 actionListener에 도달하지 못했다고 생각합니다.

즉시 입력에 대한 ValueChangeListeners가 ApplyRequestValues ​​단계에서 호출됩니다. ActionListener는 나중에 InvokeApplication 단계에서 호출됩니다. renderResponse()을 호출하면 나머지주기는 건너 뛰고 직접 RenderResponse 단계로 진행합니다.

+0

감사합니다. JSF 라이프 사이클에 더 많은 시간을 할애해야한다고 생각합니다 :) – lamostreta