gpt4 book ai didi

java - JF2动态表单元素不记得输入,每次添加元素时页面都会刷新

转载 作者:行者123 更新时间:2023-11-30 04:19:56 26 4
gpt4 key购买 nike

我正在尝试制作一个带有添加行选项的表单。但是,当我输入一些输入并再次单击添加按钮后,我输入的输入消失了。我不确定我的代码有什么问题。此外,当我单击添加按钮时,页面会刷新。有办法停止此页面刷新吗?

Person.java

public class Person{

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

public List<String> getGuys() {
return guys;
}
public void setGuys(List<String> guys) {
this.guys = guys;

public void addNewItem(){
guys.add("");
}
}

表单.xhtml

      <h:form>
<h:panelGrid columns="2">
<h:outputText value="Guys: " />
<h:dataTable value="#{person.guys}" var="men">
<h:column>
<p:inputText value="#{men}" />
</h:column>
</h:dataTable>
<h:commandButton name="add" value="Add" action="#{person.addNewItem}" />
</h:panelGrid>
<br />
<h:commandButton name="submit" type="submit" value="Submit"></h:commandButton>
</h:form>

最佳答案

如果将 bean 放置在满足功能要求的正确范围(即 View 范围)中,那么剩下的唯一主要错误是您期望 String 类具有某种神奇的 setter 方法。

还没有。 String 类是不可变的。以下内容永远不会在 String 上工作:

<p:inputText value="#{men}" />

您有 2 个选择:

  1. 创建一个真实的模型类。您可以在以下答案中找到完整的示例:


  2. 改为按行索引设置值:

    <h:dataTable binding="#{table}" value="#{person.guys}">
    <h:column>
    <p:inputText value="#{person.guys[table.rowIndex]}" />
    </h:column>
    </h:dataTable>

    (注意:表不需要额外的 bean 属性!代码按原样)

    这基本上执行person.getGuys().add(table.getRowIndex(), SubmittedValue)。 IE。 setter 在 List 本身上调用,效果非常好。另请参阅以下有关 ui:repeat 的相关答案:

关于java - JF2动态表单元素不记得输入,每次添加元素时页面都会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330569/

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