gpt4 book ai didi

java - Primefaces 数据表中的输入文本未刷新

转载 作者:行者123 更新时间:2023-12-01 07:34:29 25 4
gpt4 key购买 nike

当表单处于可编辑模式时,我需要在 primefaces 数据表中包含 inputTexts。

除了使用immediate="true"(没有表单验证)进行表单清理之外,一切正常。那么 primefaces 数据表的行为是不可预测的。用新数据填充数据表后 - 它仍然存储旧值。

简短示例 - 显示 h:dataTable 和 p:dataTable 之间的差异 - 但当示例中只有三个表之一时,它的工作方式相同:测试.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. p:dataTable 和 p:inputText2. h:dataTable 和 p:inputText3. p:dataTable 和 h:outputText

还有 2 个按钮:第一个清除数据,第二个应用数据

工作流程:

  1. 尝试更改 p:dataTable 和 h:dataTable 中 inputText 中的数据

  2. 清除列表数据(字符串的数组列表) - 单击“清除”按钮(想象一下您在表单上单击“取消”,因为您不想将数据存储到数据库)

  3. 加载新数据 - 单击“更新”按钮(假设您正在使用新数据打开新表单)

问题:为什么 p:dataTable 和 p:inputText 仍然存储手动更改的数据,而不是加载的数据?在这种情况下,有什么方法可以强制 p:dataTable 表现得像 h:dataTable 吗?

最佳答案

解决方案是:primefaces resetInput

在我的示例中,它将是:

 <p:commandButton value="Clear" actionListener="#{test.clear()}" immediate="true"
update=":form:testTable :form:testTable1 :form:testTable2">
<p:resetInput target=":form:testTable" />
</p:commandButton>


编辑:在某些情况下 - 如果上述方法不起作用 - 尝试 primefaces 扩展中的一个:

<pe:resetInput for=":form:testTable" />

关于java - Primefaces 数据表中的输入文本未刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com