p:menuitem没有调用动作监听器

时间:2017-08-29 18:54:03

标签: jsp primefaces

我有一个看起来像的菜单:

<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没有被调用,点击菜单项也没有任何反应。

1 个答案:

答案 0 :(得分:0)

所以,当我调用错误的方法时,看起来就是这样。

更改bean方法
 public void setCurrentTab(int currentTab) {
     this.currentTab = currentTab;
 } 

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

解决了这个问题。

经过几个小时的挣扎,我可以找出原因不起作用的原因。

默认情况下,actionListener期待一个名为changeTab(Long currentTab)的方法,但我在bean中的内容是changeTab(int currentTab)。所以,我基本上试图调用一个不存在的方法。 并且框架不会抛出错误,因为p:menuitem默认使用ajax。只有当我在菜单项上明确设置ajax="false"时,我才开始收到错误{{1} }。

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