2011-02-10 255 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请求。