我在页面上有一个输入字段和一个表。只要字段中的数字发生变化(ajax监听器改变事件) - 我希望相应的行数发生变化。
我将表格指向了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>
答案 0 :(得分:2)
我认为我的答案不会帮助@Anton,但它可能对另一个&#34;堆叠器有帮助#34;面临同样的问题。
我的问题很相似(当cellEdit事件完成时,dataTable消失了)。在我的情况下,原因是由ajax执行的表更新。由于我真的不需要在监听器激活后进行表更新,所以我只是删除了更新属性,现在一切都对我很好。