在数据表列JSF / PrimeFaces中达到backingbean方法

时间:2013-04-18 09:11:13

标签: jsf primefaces

在数据表列中的<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>在正确设置并在数据表列中使用时也不会解析为任何属性。

1 个答案:

答案 0 :(得分:1)

首先,摆脱prependId="false"。它使ajax处理和更新变得更糟。

为了解决这个问题,您需要重写bean,使其在处理表单提交时返回完全相同的数据模型(#{reviewFinderBean.employees}"后面的值),就像在显示表单时一样。 JSF将重新迭代它,以便找到调用命令的相关行。

如果要将bean保留在请求范围内,则需要在其(post)构造函数中重新创建完全相同的datamodel。如果您的bean已经在视图范围内,那么您需要确保getter方法完全没有业务逻辑,这样数据模型就不会发生变化。

另见: