Почему это действие ajax не работает с requestScope? - PullRequest
1 голос
/ 10 февраля 2011
package com.atlanticpkg.view.beans;

import com.atlanticpkg.controller.ejb.ContactsFacade;
import com.atlanticpkg.model.entities.Contacts;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

@Named(value = "contactsBean")
@SessionScoped
public class ContactsBean implements Serializable {

    @EJB
    ContactsFacade contactsEJB;
    private List<Contacts> contacts = new ArrayList<Contacts>();
    private int page = 0;
    private int contactsRecords;
    private boolean previousDisabled = false;
    private int firstItem = 0;
    private int batchSize = 5;

    public ContactsBean() {
    }

    @PostConstruct
    public void onLoad() {

        contactsRecords = contactsEJB.count();
        updateContactsList();
    }

    public void updateContactsList() {

        if (firstItem <= 0) {
            previousDisabled = true;
        }
        if (firstItem > 0) {
            previousDisabled = false;
        }

        contacts = contactsEJB.findRange(firstItem, batchSize);
    }

    public void next() {

        if (firstItem + batchSize < contactsRecords) {
            firstItem += batchSize;
        }

        updateContactsList();
    }

    public void previous() {

        if (firstItem > 0) {
            firstItem -= batchSize;
        }

        updateContactsList();
    }

    /**
     * @return the contacts
     */
    public List<Contacts> getContacts() {
        return contacts;
    }

    /**
     * @param contacts the contacts to set
     */
    public void setContacts(List<Contacts> contacts) {
        this.contacts = contacts;
    }

    /**
     * @return the contactsRecords
     */
    public int getContactsRecords() {
        return contactsRecords;
    }

    /**
     * @param contactsRecords the contactsRecords to set
     */
    public void setContactsRecords(int contactsRecords) {
        this.contactsRecords = contactsRecords;
    }

    /**
     * @return the page
     */
    public int getPage() {
        return page;
    }

    /**
     * @return the previousDisabled
     */
    public boolean isPreviousDisabled() {
        return previousDisabled;
    }

    /**
     * @param previousDisabled the previousDisabled to set
     */
    public void setPreviousDisabled(boolean previousDisabled) {
        this.previousDisabled = previousDisabled;
    }

    /**
     * @return the firstItem
     */
    public int getFirstItem() {
        return firstItem;
    }

    /**
     * @param firstItem the firstItem to set
     */
    public void setFirstItem(int firstItem) {
        this.firstItem = firstItem;
    }

    /**
     * @return the batchSize
     */
    public int getBatchSize() {
        return batchSize;
    }

    /**
     * @param batchSize the batchSize to set
     */
    public void setBatchSize(int batchSize) {
        this.batchSize = batchSize;
    }
}

index.xhtml

  <h:form>

                <h:panelGroup id="contactsPanel">
                    <h:dataTable id="contactsTable" value="#{contactsBean.contacts}" var="contacts">

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

                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Street"/>
                            </f:facet>
                            <h:outputText value="#{contacts.street}"/>
                        </h:column>

                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="City"/>
                            </f:facet>
                            <h:outputText value="#{contacts.city}"/>
                        </h:column>

                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="State"/>
                            </f:facet>
                            <h:outputText value="#{contacts.state}"/>
                        </h:column>

                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Zip"/>
                            </f:facet>
                            <h:outputText value="#{contacts.zip}"/>
                        </h:column>

                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Country"/>
                            </f:facet>
                            <h:outputText value="#{contacts.country}"/>
                        </h:column>

                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Sent?"/>
                            </f:facet>
                            <h:selectBooleanCheckbox value="#{contacts.sent}" />
                        </h:column>
                    </h:dataTable>


                    <h:outputText value="#{contactsBean.contactsRecords}" />

                    <h:commandLink disabled="#{contactsBean.previousDisabled}" value="&lt; previous" action="#{contactsBean.previous}">
                        <f:ajax execute="@form" render="contactsPanel"/>
                    </h:commandLink>

                    <h:commandLink value="next &gt;" action="#{contactsBean.next}">
                        <f:ajax execute="@form" render="contactsPanel"/>
                    </h:commandLink>

                </h:panelGroup>

            </h:form>

Я не уверен, почему это не работает.Технически страница не обновляется, поэтому я должен иметь возможность использовать область запроса, верно?Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Что может быть немного более подходящим, так это ViewScoped, см. Статью Balusc: http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html

1 голос
/ 10 февраля 2011

RequestScope означает, что компонент создается каждый раз, когда ему отправляется запрос.Это включает в себя запрос AJAX.

...