3

<p:commandLink>在数据表列内部调用它时,我无法访问我的支持 bean 方法。

当放在数据表之外时,我的命令链接工作正常,但是我不能直接传递选定的行变量。

这是我的代码:

              <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 帖子被触发,但不知何故从未解析为服务器上正确的 backingbean 方法

<f:setPropertyActionListener>正确设置并在数据表列中使用时,也不会解析任何属性。

4

1 回答 1

1

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

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

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

也可以看看:

于 2013-04-18T11:51:43.770 回答