从另一个组件更新dataTable(使用延迟加载)

时间:2011-11-23 08:52:46

标签: java jsf primefaces

我在dataTable中使用延迟加载和分页,并且工作正常。问题是我在同一个html页面中有一个高级搜索功能,当我点击搜索按钮时,我希望我的dataTable根据我在高级搜索字段中输入的值进行更新(此功能在{ {1}}, 代码如下。但是我的按钮上的update属性似乎没有做任何事情,因为懒惰模型的加载方法没有被调用。所以问题是:我可以以某种方式从模型外部调用惰性模型的加载方法,以便更新我的dataTable吗?

FORM:

DaoFactory.getDocumentoDao().buscarLazy(first, pageSize)

包含模特的豆子:

<h:form id="frmCli">
    <p:commandButton value="Buscar"
                     update="frmCli:panelResultadosDoc"/>
    <h:panelGroup id="panelResultadosDoc">
        <div class="dataTable">     
            <p:dataTable id="documentos"
                         value="#{documentoBuscadorBean.lazyModel}"
                         lazy="true"
                         var="varDocBean"
                         paginator="true"
                         paginatorPosition="bottom"
                         paginatorAlwaysVisible="false"
                         rows="5">           
                <p:column>
                   <f:facet name="header">Código</f:facet>
                   <h:outputText value="#{varDocBean.documento.id}"/>
                 </p:column>                                                         
            </p:dataTable>
        </div>     
    </h:panelGroup>
</h:form>

2 个答案:

答案 0 :(得分:2)

如果我没有遗漏某些东西,你可以采取行动:

<p:commandButton value="Buscar"
                 action="#{documentoBuscadorBean.lazyModel.load(0,10,...)}"
                 process="@form"
                 update="frmCli:panelResultadosDoc"/>

最好添加无参数版本的加载,这样就不会在视图中混合使用逻辑。如果由于某种原因你不能使用EL 2.2,这甚至是强制性的(我强烈推荐EL 2.2,为你节省了很多丑陋的f:param处理)。

答案 1 :(得分:0)

#{varDocBean.documento.id}是什么意思? varDocBeanDocumentoBean - 所以documento是DocumentoBean的属性吗?

另外,commandButton什么都不做?我只看到一个commandButton但没有操作方法。

您应该在Primefaces实验室展示中lazy dataTable查看(再次):http://www.primefaces.org/showcase-labs/ui/datatableLazy.jsf