在 <p:commandLink>
中调用我的支持 beans 方法时无法访问它在数据表列中。
我的命令链接放在数据表之外时工作正常,但我无法直接传递选定的行变量。
这是我的代码:
<h:form id="reviewLists" prependId="false">
<p:messages />
<p:panel header="Beoordelingen" style="margin-bottom:10px;">
<p:dataTable value="#{reviewFinderBean.employees}" var="employee" >
<p:column headerText="Medewerker" >
<h:commandLink value="#{employee.name}" action="#{reviewFinderBean.showReviewsForEmployee(employee)}" />
</p:column>
</p:dataTable>
</p:panel>
</h:form>
当检查我的浏览器发出的 http 请求时,我看到它按预期执行了另一个帖子 (ajax),我尝试使用 prependId="false",因为我认为生成的组件名称可能无法解析,但这没有帮助。
ajax post 被触发,但不知何故从未解析为服务器上正确的 backingbean 方法
<f:setPropertyActionListener>
当正确设置并在数据表列中使用时,也不会解析为任何属性。
最佳答案
首先,去掉 prependId="false"
。它使 ajax 处理和更新变得更糟。
为了解决这个问题,您需要重写 bean,使其在处理表单时返回完全相同的数据模型(#{reviewFinderBean.employees}"
后面的值)按照显示表单期间的原样提交。JSF 将重新迭代它以找到调用命令的关联行。
如果您想将 bean 保留在请求范围内,那么您需要在其(后)构造函数中重新创建完全相同的数据模型。如果您的 bean 已经在 View 范围内,那么您需要确保 getter 方法完全不受业务逻辑的影响,这样数据模型就不会发生潜在的变化。
另见:
关于jsf - 到达数据表列 JSF/PrimeFaces 中的 backingbean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16078843/