0

我有一个创建新的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");

}
4

2 回答 2

1

Employee将实例保存在数据库中后重新创建实例。

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

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

也可以看看:


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

@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}" />
...
于 2013-03-27T20:47:22.390 回答
-1

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

public void clear_objet() {
  this.producto = null;
}
<h:form id="form">
  #{bean.limpiar_objeto()} 
</h:form>
于 2017-11-06T16:03:15.273 回答