rich:dataScroller在JSF中不刷新rich:dataTable

时间:2009-12-29 09:24:55

标签: java jsf java-ee refresh richfaces

我有一个rich:dataTable和一个rich:dataScroller。当我单击datascroller时,我的dataTable不会自动刷新以显示正确的页面。但是,如果我按下刷新按钮,则dataTable会显示正确的页面。

我做错了什么?

这是我的代码:

<rich:dataTable id="applicantsTable"
binding="#{applicantListManBean.applicantsDataTable}"
value="#{applicantListManBean.applicantsList}" var="applicant"
rows="10" width="650">

<h:column>
    <f:facet name="header">
        <h:outputText value="Name" />
    </f:facet>
    <h:outputText value="#{applicant.name}" />
</h:column>

<h:column>
    <f:facet name="header">
        <h:outputText value="Email" />
    </f:facet>
    <h:outputText value="#{applicant.email}" />
</h:column>

<h:column>

    <f:facet name="header">
        <h:outputText value="Action" />
    </f:facet>

    <h:commandLink action="#{applicantListManBean.showApplicantProducts}"
        rendered="true">
        <h:graphicImage value="/images/icons/view.png" width="15" height="15"
            alt="view" />
        <f:setPropertyActionListener
            target="#{applicantListManBean.tempApplicant}" value="#{applicant}" />
    </h:commandLink>

    <h:commandLink action="#{applicantListManBean.deleteApplicant}"
        rendered="true">
        <h:graphicImage value="/images/icons/delete.png" width="15"
            height="15" alt="view" />
        <f:setPropertyActionListener
            target="#{applicantListManBean.tempApplicant}" value="#{applicant}" />
    </h:commandLink>

</h:column>
</rich:dataTable>

<rich:datascroller id="applicantsScroller" for="applicantsTable"
reRender="sc1" maxPages="7" page="#{applicantListManBean.scrollerPage}" />

更新:附加了Javascript错误: alt text

1 http://imgur.com/132fL.png

5 个答案:

答案 0 :(得分:2)

删除reRender="sc1"。您已从RichFaces演示中复制粘贴此内容,但您已删除“sc1”组件,因此可能会发生javascript错误,导致表无法刷新。

另外,请确保dataTabledatascroller<h:form>..</h:form>包围(均为一种形式)

答案 1 :(得分:1)

问题是h:commandLink。它以某种方式为富人创造了问题:数据表。使用a4j:commandLink或s:link(如果你使用Jboss Seam)。

答案 2 :(得分:1)

您可能需要考虑使用t:saveState标记或将处理程序放在会话范围内。可能发生这种情况的原因是因为您在请求范围内拥有处理程序,并且由于commandLink是另一个请求,因此无法找到要回发的原始处理程序实例。通过简单地将此saveState放在这里,我的工作开始了。

只是一个想法。

答案 3 :(得分:0)

rich:datatable中的reRenderrich:datascroller的ID放入表中,如下所示。这对我有用:

<f:view>
    <a4j:keepAlive beanName="datosCtrlBean" ajaxOnly="true"/>
    <h:form>
        <rich:dataTable reRender="sc2"  width="300" id="carList" rows="10" columnClasses="col"
                            value="#{datosCtrlBean.datos}" var="category" id="myTable" >

                <f:facet name="header">
                    <rich:columnGroup>
                        <h:column>
                            <h:outputText styleClass="headerText" value="Make" />
                        </h:column>
                    </rich:columnGroup>
                </f:facet>
                <h:column>
                    <h:outputText value="#{category}" />
                </h:column>
                <f:facet name="footer">
                <rich:datascroller align="left" for="carList" id="sc2"  ajaxSingle="true" reRender="myTable" limitToList="myTable"/>
                </f:facet>
            </rich:dataTable>
    </h:form>
</f:view>

答案 4 :(得分:0)

是错的..

尝试:

    <rich:dataTable width="300" id="carList" rows="10" columnClasses="col"
                        value="#{datosCtrlBean.datos}" var="category" >


            <rich:datascroller align="left" for="carList" id="sc2"  ajaxSingle="true" reRender="carList" limitToList="carList"/>