2011-02-10 3 views
1
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는이 ajax 작업이 requestScope와 함께 작동하지 않는 이유는 무엇입니까?

<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> 

나는이 작동하지 않는 이유를 모르겠어요. 기술적으로 페이지가 새로 고쳐지지 않아 요청 범위를 올바르게 사용할 수 있어야합니다. 감사.

답변

1

RequestScope은 요청이 요청을 보낼 때마다 Bean이 인스턴스화됨을 의미합니다. 여기에는 ajax 요청이 포함됩니다.

관련 문제