2017-08-29 44 views
0

我看起来像一个菜单:号码:菜单项不调用动作监听

<h:form> 
    <p:menu> 
     <p:menuitem value="One" actionListener="#{tabsVO.changeTab(1)}" update="tabView"/> 
     <p:menuitem value="Two" actionListener="#{tabsVO.changeTab(2)}" update="tabView"/>        
     <p:menuitem value="Three" actionListener="#{tabsVO.changeTab(3)}" update="tabView"/> 
    </p:menu> 
</h:form> 

相应的bean:

@ManagedBean 
@ViewScoped 
public class TabsVO{  

    private int currentTab; 

    @PostConstruct 
    public void init() { 
     currentTab = 0; 
    } 

    public void changeTab(int tabIndex){ 
     this.currentTab = tabIndex; 
    } 

    public int getCurrentTab() { 
     return currentTab; 
    } 

    public void setCurrentTab(int currentTab) { 
     this.currentTab = currentTab; 
    } 
} 

一切似乎都不错,但不调用action listener并没有任何反应上点击菜单项。

回答

0

因此,它看起来像所有这些,而我正在调用错误的方法。

public void setCurrentTab(int currentTab) { 
    this.currentTab = currentTab; 
} 

更改bean的方法

public void setCurrentTab(Long currentTab) { 
    this.currentTab = currentTab.intValue(); 
} 

解决的问题。

经过数小时的挣扎后,我可以找出为什么这不起作用。

默认情况下,actionListener期待一种叫做changeTab(Long currentTab)的方法,但是我在我的bean中拥有的方法是changeTab(int currentTab)。所以,我基本上试图调用一个不存在的方法。 并没有错误被框架抛出可能是因为​​默认使用ajax。只有当我明确设置ajax="false"在菜单项上,我开始得到错误,说"method doesn't exist"

我现在陷入了这个陷阱两次,浪费了很多时间搞清楚了。所以把它放在这里,以便它可以帮助别人。