2013-04-25 90 views
0

我試着添加一個ActionListener菜單項primefaces組件嘗試添加一個ActionListener

itemLogout.addActionListener(new ActionListenerManagedBean()); 

而在ActionListenerManagedBean我用:

public class ActionListenerManagedBean implements ActionListener { 


    public ActionListenerManagedBean() { 
     super(); 

    } 

    @Override 
    public void processAction(ActionEvent arg0) throws AbortProcessingException { 
     System.out.println("Test Action Listener called.."); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == "aa"){ 
    } 
    } 
} 

但不是發生在我點擊退出項目菜單上。

你能幫我嗎?在此先感謝...

+0

請詳細說明開發者條款中的「不發生」,而不是最終用戶的條款。究竟發生了什麼?發送HTTP請求?檢索HTTP請求?恢復JSF視圖?解碼和應用請求參數?識別被點擊的按鈕組件?排隊行動事件?推進到調用應用程序階段?觸發行動事件?調用動作偵聽器方法?傳遞方法內部的'if'塊? – BalusC 2013-04-25 14:34:15

+0

請注意,目前的答案天真只是假設最後一個方面。然而,我認爲JSF無法識別被點擊的按鈕組件。創建動態組件的常見原因是他們忘記設置組件ID。如果您在SSCCE的風格中顯示代碼而不是隨機選擇的部分,則會更有幫助。 – BalusC 2013-04-25 14:37:33

回答

-1

您的e.getSource() == "aa"應該是e.getSource() == itemLogout。基本上e.getSource()返回調用動作的對象。

我假設ActionListenerManagedBean是一個內部類。

+3

我承認OP的代碼遠沒有完成,但我只是想警告[JSF'ActionListener'](http://docs.oracle.com/javaee/6/api/javax/faces/event/ActionListener。 html)沒有指定'actionPerformed'方法,而是'processAction'方法。所以,當用作JSF動作監聽器時,'actionPerformed'方法從不被**調用。它是'processAction'方法。 'actionPerformed'可能是[AWT'ActionListener']的意外導入的剩餘部分(http://docs.oracle.com/javase/6/docs/api/java/awt/event/ActionListener.html)。還要注意'@ Override' – BalusC 2013-04-25 14:42:33

+0

我沒有使用內部類,並且processAction沒有被調用。對不起,我的英語 – Al2x 2013-04-25 14:46:05

+0

MenuItem itemLogout = new MenuItem(); \t \t itemLogout.setValue(「Sair」); \t \t itemLogout.setId(「itemLogout」); \t \t itemLogout.addActionListener(new ActionListenerManagedBean()); \t \t itemLogout.setOutcome(「logout」); \t \t menuModel.addMenuItem(itemLogout); – Al2x 2013-04-25 14:47:45