簡體   English   中英

Primefaces Ajax分頁不起作用

[英]Primefaces ajax pagination not working

我有以下jsf頁面,其中通過數據庫的ajax請求填充數據表。 問題是,按下分頁欄上的另一個頁面按鈕后,表格未顯示任何結果。 將支持bean的范圍更改為會話會有所幫助,但這不是解決方案。 為什么會這樣呢?

    <h:form>
            <h:panelGrid columns="2" cellpadding="8" style="width: 545px">          
                <h:panelGroup>
                    <p:outputLabel value="Client name: " for="searchString" />
                    <br />                  
                    <p:inputText id="searchString" title="searchString" value="#{findClientBean.searchString}" />                       
                </h:panelGroup>
                <h:panelGroup>
                    <br />
                    <p:message for="searchString" />
                </h:panelGroup>             
                    <p:commandButton value="Search" styleClass="pCommandButton" >
                    <f:ajax execute="searchString" listener="#{findClientBean.findClient}" render=":resultTable" />
                    </p:commandButton>                                  
            </h:panelGrid>                  
            </h:form>
            <br />
            <p:dataTable id="resultTable" var="client" value="#{findClientBean.resultList}" paginator="true" rows="10"  
                 paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                 rowsPerPageTemplate="5,10,15" paginatorPosition="bottom">
                <p:column headerText="Search results">
                    <h:outputLink value="../temp.xhtml?id=#{client.id}">#{client.firstName} #{client.lastName}</h:outputLink>
                </p:column>
            </p:dataTable>
        <h:form>

支持bean代碼:

@Named
@RequestScoped
public class FindClientBean implements Serializable {

@Inject
private ClientDAO clientDAO;    
@NotNull(message="Search string cannot be empty")   
private String searchString;
private List<Client> resultList;        

public void findClient() {
    resultList = clientDAO.findClientByNameOrLastnamePart(searchString);
}

public void setResultList(List<Client> resultList) {
    this.resultList = resultList;
}

public List<Client> getResultList() {
    return resultList;
}

public String getSearchString() {
    return searchString;
}

public void setSearchString(String searchString) {
    this.searchString = searchString;
}
}

每當用戶按下搜索按鈕時,就會填充您的客戶resultList。

由於集合位於RequestScoped bean中,因此resultList一經發送回View(連同整個bean),就將被擦除。

結果,當用戶嘗試導航到另一個頁面(從而發出第二個請求)時,該組件將不再找到已填充的resultList,並且將顯示“未找到記錄”消息。

將您的bean“ 升級 ”到ViewScoped (或任何使bean壽命更長的范圍)。

@Named
@ViewScoped
public class FindClientBean implements Serializable{
(...)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM