JSF dataTable中h:commandLink与p:commandLink无法正常工作问题求解
修复思路
- 首先调整托管Bean的作用域,替换为
@ViewScoped(注意导入正确的包:JSF 2.2+用javax.faces.view.ViewScoped/Jakarta EE用jakarta.faces.view.ViewScoped,不要用错CDI的伪作用域)。Request作用域下回发请求时forSalePropList未重新初始化,JSF会因行数据模型校验不通过直接跳过Action方法执行;Session作用域会导致多标签页数据冲突,不属于该场景的合适选择。 - 修正Primefaces CommandLink的AJAX配置:p:commandLink默认使用AJAX提交,无法触发整页导航跳转,要么添加
ajax="false"属性关闭AJAX,要么在托管Bean返回的导航字符串后添加?faces-redirect=true,示例:return "salePropertyDetails.xhtml?faces-redirect=true"; - 修正参数传递逻辑:当前代码写死传递参数
2,需替换为当前行对应数据的ID,修改commandLink代码为:<p:commandLink process="@this" value="View Details" action="#{forSaleController.fsDetails(bk.pid)}" ajax="false"/> - 额外检查点:确认页面内没有嵌套的
<h:form>组件,嵌套表单会导致提交行为异常;确认forSaleController的forSalePropList属性在Bean初始化时(@PostConstruct注解的方法中)完成加载,不要在getter方法中执行查询逻辑,避免重复查询或回发时数据丢失。 - 若仍无法触发方法,可添加
<h:messages>标签开启全局消息提示,查看是否存在校验错误阻止了Action方法执行。
内容的提问来源于stack exchange,提问作者Hoan Nguyen
相关产品推荐
相关产品推荐

