jsf - 到达数据表列 JSF/PrimeFaces 中的 backingbean 方法

标签 jsf primefaces

<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/

相关文章:

java - JSF 1.2 中的 session 处理

jsf - 为什么在我使用素数符号时使用全能符号?

unit-testing - JSFUnit 是否测试 Web 应用程序的所有方面?

jsf-2 - 更改 <p :layoutUnit> dynamically on click of link from menu through Ajax 的内容

ajax - p :commandButton update doesn't work in ui:include

jsf - Primefaces 数据表标题宽度 :auto

jsf - 将@ManagedBean 切换为@Named 后 : javax. el.PropertyNotFoundException : Target Unreachable, 标识符 'person' 解析为空

java - JSF 强制渲染值表达式

java - JSF/Primefaces 选择一个菜单会导致问题

jsf - 设置 <p :dialog> in dynamically 的标题