2015-04-12 94 views
2

我在頁面上有一個輸入字段和一個表格。每當一個字段中的數字發生變化時(ajax監聽器更改事件) - 我希望相應地更改行數。在primefaces中單元格編輯後表格消失(也未保存數據)

我將表格指向Backing bean中的Arraylist,並播放其大小。

但是當我在表中編輯一個值時 - 按下回車鍵,表格消失,並且只有當我再次更改字段值時纔會重新出現。

作爲獎勵,在調試模式下,我看到支持arraylist總是有空值。

這裏去bean代碼:

@ManagedBean(name = "bean") 
@ViewScoped 
public class TestBean { 

    private List<String> hostnames = new ArrayList<String>(); 

    private int copiesQuantityJustCopy; 

    public int getCopiesQuantityJustCopy() { 
     return copiesQuantityJustCopy; 
    } 

    public void setCopiesQuantityJustCopy(int copiesQuantityJustCopy) { 
     this.copiesQuantityJustCopy = copiesQuantityJustCopy; 
    } 

    public List<String> getHostnames() { 
     return hostnames; 
    } 

    public void setHostnames(List<String> hostnames) { 
     this.hostnames = hostnames; 
    } 

    public void onUpdateCount() { 
     int hostnamesCount = hostnames.size(); 
     System.out.println("delta = " + hostnamesCount + " - " + copiesQuantityJustCopy); 
     int delta = hostnamesCount - copiesQuantityJustCopy; 
     if (delta > 0) 
      for (int i = 1; i < delta; i++) 
       hostnames.remove(delta); 
     if (delta < 0) 
      for (int i = 0; i < -delta; i++) 
       hostnames.add(""); 
    } 
} 

和視圖代碼:

<h:form id="form1"> 
    <p:inputMask mask="9?99" maxlength="3" placeHolder=" " value="#{bean.copiesQuantityJustCopy}"> 
     <p:ajax event="change" listener="#{bean.onUpdateCount()}" update=":form1:hostnamesTable" /> 
    </p:inputMask> 

    <p:outputPanel id="hostnamesTable" rendered="true"> 
     <p:dataTable value="#{bean.hostnames}" var="hostname" 
      id="hostnames" editable="true" editMode="cell"> 

      <p:ajax event="cellEdit" update=":form1:hostnamesTable" process="@this" /> 

      <p:column> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{hostname}" /> 
        </f:facet> 

        <f:facet name="input"> 
         <p:inputText value="#{hostname}" style="width:96%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

     </p:dataTable> 
    </p:outputPanel> 
</h:form> 
+1

「*消失*」意味着在這種情況下是什麼?表格是否變空或它從HTML DOM樹中自行消失?您還需要在用@ PostConstruct註釋的方法中填充列表,例如在頁面加載並實例化bean時,讓列表初始化。 (視圖範圍的bean也需要'java.io.Serializable'接口與私有靜態最終長字段'serialVersionUid'一起實現)。 – Tiny

+1

並檢查正確的Viewscoped包與ManagedBean – Kukeltje

+0

@Tiny嗨!我試過了:1)實現可序列化:對行爲沒有影響; 2)調查開發人員工具inspector:只看到div這個名字,沒有更多:

, – Anton

回答

2

我想,我的回答不會幫助@Anton,但它可能是有幫助的另一種「堆積」面臨同樣的問題。

我的問題是類似的(當cellEdit事件完成時dataTable消失)。在我的情況下,原因是ajax執行的表更新。因爲我真的不需要更新偵聽器後的表更新,我只是刪除更新屬性,現在一切都對我很好。

+0

你可以請加上'非工作'的代碼到答案和工作代碼...在[mcve]的味道(只有在這種情況下的xhtml)。而且它**是**的,它可以完全符合OP的要求,所以它可以幫助他。你能發佈PrimeFaces版本信息嗎? – Kukeltje

相關問題