我在頁面上有一個輸入字段和一個表格。每當一個字段中的數字發生變化時(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>
「*消失*」意味着在這種情況下是什麼?表格是否變空或它從HTML DOM樹中自行消失?您還需要在用@ PostConstruct註釋的方法中填充列表,例如在頁面加載並實例化bean時,讓列表初始化。 (視圖範圍的bean也需要'java.io.Serializable'接口與私有靜態最終長字段'serialVersionUid'一起實現)。 – Tiny
並檢查正確的Viewscoped包與ManagedBean – Kukeltje
@Tiny嗨!我試過了:1)實現可序列化:對行爲沒有影響; 2)調查開發人員工具inspector:只看到div這個名字,沒有更多:
, – Anton