在数据表列中的<p:commandLink>
中调用它时,我无法访问我的backing beans方法。
我的commandlink在放在数据表之外时工作正常,但是我不能直接传递选定的行变量。
这是我的代码:
<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”,因为我认为生成的组件名称可能是不可检索的但是没有帮助。 / p>
ajax帖子被解雇但不知何故从未解析为服务器上正确的backingbean方法
<f:setPropertyActionListener>
在正确设置并在数据表列中使用时也不会解析为任何属性。
答案 0 :(得分:1)
首先,摆脱prependId="false"
。它使ajax处理和更新变得更糟。
为了解决这个问题,您需要重写bean,使其在处理表单提交时返回完全相同的数据模型(#{reviewFinderBean.employees}"
后面的值),就像在显示表单时一样。 JSF将重新迭代它,以便找到调用命令的相关行。
如果要将bean保留在请求范围内,则需要在其(post)构造函数中重新创建完全相同的datamodel。如果您的bean已经在视图范围内,那么您需要确保getter方法完全没有业务逻辑,这样数据模型就不会发生变化。