Флажок и кнопка взаимодействия в JSF - PullRequest
0 голосов
/ 17 октября 2011

У меня есть флажок:

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

чей метод valueChangeListenerExpression:

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}"/>

чей поддерживающий боб:

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 достигнута, но я не выполняю действия, которые я пишу (получение rowKey из rowToBeRemoved и удаление их), я не понимаю, почему. Обратный боб - область запроса, имеет ли это какое-либо отношение?

1 Ответ

1 голос
/ 17 октября 2011

У меня сложилось впечатление, что вы замыкаете жизненный цикл JSF, вызывая FacesContext.getCurrentInstance () .renderResponse () в selectSingleCBEvent, и ваш actionListener никогда не достигается.

ValueChangeListeners для непосредственных входных данных вызываются в фазе ApplyRequestValues.ActionListeners вызываются позже на этапе InvokeApplication.Вызывая renderResponse (), вы пропускаете оставшуюся часть цикла и переходите непосредственно к фазе RenderResponse.

...