【问题标题】:Reset input fields of a form after successful submit提交成功后重置表单的输入字段
【发布时间】:2013-03-18 03:14:11
【问题描述】:

我有一个创建新Employee 的表单。我的支持 bean 是@SessionScoped。当我创建第一个员工时,一切都很顺利。但是,当我要创建第二个员工时,表单仍会在输入字段中显示第一个员工的属性。

如何在不改变 bean 范围的情况下重置它们?范围对于其他目的是强制性的。 我使用托管 Bean(控制器),其中我有“创建员工”

public String createEmploye()

{

    employe = new Employe();

    employe.setId(this.id);
    employe.setNom(this.nom);
    employe.setPrenom(this.prenom);
    employe.setNum_telephone(this.num_telephone);
    employe.setAdresse(this.adresse);
    employe.setNum_poste(this.num_poste);

    employeBean.addEmploye(employe);

    employe.setNom("");

    return "ListEmployes.xhtml?faces-redirect=true";
    // return ("ListEmployes.xhtml");

}

【问题讨论】:

    标签: html jsf-2 primefaces ejb


    【解决方案1】:

    我可以通过创建一个使对象无效的方法并在 jsf 页面上的表单中调用它来解决这个问题。

    public void clear_objet() {
      this.producto = null;
    }
    
    <h:form id="form">
      #{bean.limpiar_objeto()} 
    </h:form>
    

    【讨论】:

      【解决方案2】:

      Employee 实例保存到数据库后重新创建它。

      public void save() {
          service.save(employee);
          employee = new Employee(); // <--- Just add this line.
      }
      

      与具体问题无关,但我强烈建议重新考虑您的 bean 设计。它不应该被分成两个豆子吗?一个请求/视图的范围为表单本身,另一个会话的范围为真正的会话范围的数据,这些数据被注入到请求/视图范围的数据中。这样,您可以在保存后执行重定向到同一个视图,以便从一个干净的表单开始(并具有额外的好处,即当您在提交后刷新页面时,同一员工不会在数据库中重复) .

      另见:


      更新 根据更新,您似乎在备份 bean 中复制/展平 Employee 的所有属性,而不是让表单直接引用它们。我强烈建议不要将模型属性复制/展平到控制器中。

      @ManagedBean
      @SessionScoped
      public class Manager {
      
          private Employee employee = new Employee();
      
          @EJB
          private EmployeeService service;
      
          public void createEmployee() {
              service.create(employee);
              employee = new Employee();
          }
      
          public Employee getEmployee() {
              return employee;
          }
      
      }
      

      <h:inputText value="#{manager.employee.firstname}" />
      <h:inputText value="#{manager.employee.lastname}" />
      <h:inputText value="#{manager.employee.telephone}" />
      <h:inputText value="#{manager.employee.street}" />
      ...
      

      【讨论】:

      • 你好,我尝试添加 employee=new Employee() 但仍然是同样的问题。我无法更改 @sessionScope 并且这不起作用......我该怎么办? :/无论如何,谢谢
      • 您是通过 ajax 提交表单吗?如果是这样,您是否在提交后更新表单? (例如,通过 &lt;f:ajax&gt; 中的 render="@form" 属性或 PrimeFaces 组件中的 update="@form" 属性)。
      • 不,我不使用 ajax,我使用 jsf 组件
      • 输入与问题无关。提交按钮更是如此。你在用&lt;p:commandButton&gt;吗?无论如何,您也可以通过在发布后执行重定向来解决它,例如return "createemployee?faces-redirect=true";
      • ok 一个我使用的例子
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      相关资源
      最近更新 更多