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

标签 java forms dynamic jsf-2

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

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/

相关文章:

ruby-on-rails - Rails fields_for不起作用

forms - 可用性:即使焦点未设置在 OK/DONE 按钮上,是否应按 ENTER 键关闭向导窗体?

javascript - 调用 e.preventDefault() 后提交表单

c++ - 动态数组未正确初始化

java - 无法使用 HibernateOGM 连接到 Mongodb

java - 迭代键集时更新条目

java - 如何制作 if 语句来选择要在 JComboBox 中显示的字符串?

python - 使用动态编程技术调试 Google KickStart "2022"Round D 最大增益问题

php - 您能否在动态数据透视表上使用此代码帮助我。错误:(!) fatal error :调用成员函数fetch_all()

java - Android获取其他应用的PID