【问题标题】:Reaching backingbean method in datatable column JSF/PrimeFaces在数据表列 JSF/PrimeFaces 中达到 backingbean 方法
【发布时间】:2013-04-18 09:11:13
【问题描述】:

在数据表列中的 <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 方法

&lt;f:setPropertyActionListener&gt; 在正确设置并在数据表列中使用时也不会解析为任何属性。

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

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

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

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

    另见:

    【讨论】:

    • 谢谢。我已经在 @PostConstruct 方法中重新创建数据模型,但是重新创建的数据模型基于搜索查询中的特定参数,这些参数在新请求期间重置。我现在更改了范围,一切正常。
    猜你喜欢
    • 2012-07-30
    • 2014-05-22
    • 1970-01-01
    • 2012-11-22
    • 2013-02-06
    • 1970-01-01
    • 2012-07-21
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多