Расширенная таблица данных и DataScroller

<rich:extendedDataTable sortMode="single" width="700px" value="#{gpsReport.reportSummary}"
                                                enableContextMenu="true" var="gps"
                                                selectionMode="single"
                                                rowClasses="tableRow1, tableRow2"
                                                id="tbl_gps" height="301px" rows="#{gpsReport.rowCount}" rowKeyVar="row">

                            <rich:column label="User" style="text-align: center" width="100px" >

                                <f:facet name="header">
                                    <h:outputText value="User" />
                                </f:facet>
                                <h:outputText value="#{gps.currentUser}" />

                            </rich:column>

                            <rich:column label="Time Stamp" style="text-align: center" width="140px" >

                                <f:facet name="header">
                                    <h:outputText value="Time Stamp" />
                                </f:facet>
                                <h:outputText value="#{gps.modifiedDate}" />

                            </rich:column>

                            <rich:column label="Latitude" style="text-align: center" width="110px" >

                                <f:facet name="header">
                                    <h:outputText value="Latitude" />
                                </f:facet>
                                <h:outputText value="#{gps.latitude}" />

                            </rich:column>

                            <rich:column label="Longitude" style="text-align: center" width="110px" >

                                <f:facet name="header">
                                    <h:outputText value="Longitude" />
                                </f:facet>
                                <h:outputText value="#{gps.longitude}" />

                            </rich:column>

                            <rich:column label="Location" style="text-align: center" width="240px" >

                                <f:facet name="header">
                                    <h:outputText value="Location" />
                                </f:facet>
                                <h:outputText value="#{gps.location}" />

                            </rich:column>

                        </rich:extendedDataTable>

                        <rich:datascroller align="center" for="tbl_gps"  />

Почему этот код не работает? Я что-то пропустил? Это та же самая реализация, которую я использовал на другой странице, на самом деле она работает. Но на этот раз не повезло.

1 ответ

Решение

Проблема в том, что содержимое списка обновляется каждый раз при создании управляемого компонента. Поскольку управляемый бин имеет область запроса, он будет создаваться при каждом действии (включая действия ajax). Пожалуйста, обратитесь к разделу Как правильно выбрать сферу применения бобов? и ссылка, приведенная там, где объясняются области действия управляемых bean-компонентов и приводятся хорошие примеры их использования.

Поскольку вы используете JSF 1.2, вы не можете использовать область просмотра. Вместо этого, чтобы решить эту проблему, у вас есть два способа:

  1. Измените область действия вашего управляемого компонента на область сеанса. Это решит вашу проблему, но управляемый компонент будет жить до истечения сеанса пользователя, что не является хорошим решением.

  2. Поддерживайте ваш управляемый компонент в объеме запроса и используйте возможности RichFaces 3.3 и @KeepAlive аннотаций. Эта аннотация сделает ваш запрос действующим, пока пользователь остается в том же виде (очень похоже на область просмотра). Его использование довольно просто:

    @KeepAlive
    public class GpsReport {
        //managed bean definition...
    }
    
Другие вопросы по тегам