當表單處於可編輯模式時,需要在primefaces數據表中包含inputTexts。Primefaces dataTable中的InputText不刷新
除了使用immediate =「true」(沒有表單驗證)的表單清理以外,一切正常。那麼primefaces數據表的行爲是不可預測的。用新數據填寫數據表後,它仍然保存舊值。
短的例子 - 顯示h的差異:DataTable,並將號碼:dataTable的 - 但它的工作方式相同,只有從例子三個表之一時: test.xhtml
<h:body>
<h:form id="form">
<p:dataTable var="v" value="#{test.list}" id="testTable">
<p:column headerText="Test value">
<p:inputText value="#{v}"/>
</p:column>
</p:dataTable>
<h:dataTable var="v" value="#{test.list}" id="testTable1">
<h:column>
<f:facet name="header">
<h:outputText value="Test value" />
</f:facet>
<p:inputText value="#{v}" />
</h:column>
</h:dataTable>
<p:dataTable var="v" value="#{test.list}" id="testTable2">
<p:column headerText="Test value">
<h:outputText value="#{v}" />
</p:column>
</p:dataTable>
<p:commandButton value="Clear" actionListener="#{test.clear()}" immediate="true" update=":form:testTable :form:testTable1 :form:testTable2"/>
<p:commandButton value="Update" actionListener="#{test.update()}" update=":form:testTable :form:testTable1 :form:testTable2"/>
</h:form>
</h:body>
和java:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@ViewScoped
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
private List<String> list;
@PostConstruct
private void init(){
update();
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public void clear() {
list = new ArrayList<String>();
}
public void update() {
list = new ArrayList<String>();
list.add("Item 1");
list.add("Item 2");
}
}
在上面的例子我有3種配置: 1.號碼:dataTable中具有p:inputText的 2. H:dataTable中具有p:0的inputText3.號碼:dataTable中與H:的outputText
和2個按鈕:首先清除數據,第二數據應用
工作流程:
嘗試更改中的p inputTexts數據:dataTable中和h :dataTable的
列表清除數據(字符串的ArrayList) - 點擊「清除」按鈕(想象一下,你點擊取消形式,因爲你不想來存儲數據到數據庫)
加載新的數據 - 點擊「更新」按鈕(想象一下,你是開擴新數據的新形式)
問: 爲什麼號碼:dataTable中與號碼:inputText的還是賣場手動更改數據,不是裝載的? 有沒有辦法強制p:dataTable的行爲像h:dataTable在這種情況下?
感謝Luiggi,但正如你說這是不是。我發佈了這三個表來顯示p:dataTable和h:dataTable的行爲差異。但在我的例子中只列出了其中的一個表。 p:dataTable仍然會像我描述的那樣工作,因爲我不喜歡,而h:dataTable會像我喜歡的那樣工作。你能告訴我爲什麼p:dataTable從bean中清除綁定的空列表(清理後),並且在新列表生成並更新p:dataTable之後,手動更改但不是綁定列表。它會記住在bean清單清理之前手動創建的值。 – robson