我有一个看起来像的菜单:
<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 :(得分: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} }。
我现在已经陷入了这个陷阱两次并且浪费了很多时间来搞清楚它。所以把它放在这里,以便它可以帮助某人。