PrimeFaces点击MenuItem无法调用后台方法问题求助
针对你的问题,以下是几个可能的原因和对应的解决步骤:
移除EL表达式中的括号
将action="#{documentiBean.redirectAllega()}"改为action="#{documentiBean.redirectAllega}"。虽然EL 2.2及以上版本支持带括号的无参方法调用,但部分容器可能存在兼容性问题,省略括号是更稳妥的写法。为导航需求禁用AJAX
由于你的最终目标是实现页面跳转,而默认情况下p:menuitem使用AJAX请求,AJAX无法触发完整的页面重定向。需要在p:menuitem中添加ajax="false"属性,这样点击后会触发完整的POST请求,既可以执行后台方法,也能正常完成页面跳转。即使是测试控制台输出,禁用AJAX也能确保方法被执行。检查浏览器控制台的JavaScript错误
打开浏览器开发者工具(F12)的Console标签页,点击菜单项后查看是否有JS报错。如果存在脚本错误,可能会阻止请求发送到后台,需要先修复这些错误。验证Bean的作用域和方法签名
确保documentiBean处于有效的作用域(如@ViewScoped、@SessionScoped),且redirectAllega方法是public修饰的,无参数,返回类型为String(用于导航)或void(仅执行逻辑)。例如:public String redirectAllega() { System.out.println("测试方法调用"); return "/目标页面路径.xhtml?faces-redirect=true"; }临时移除
immediate="true"属性immediate="true"会跳过表单验证阶段,但如果你的表单中没有需要跳过的验证逻辑,这个属性可能会干扰JSF生命周期,导致方法无法被正确调用。尝试移除该属性后测试。
内容的提问来源于stack exchange,提问作者AndreaGFT

