我有一个创建新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");
}
答案 0 :(得分:1)
将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}" />
...
答案 1 :(得分:-1)
我可以通过创建一个方法来解决这个问题,该方法使我无效对象并在页面jsf上的表单中调用它。
public void clear_objet() {
this.producto = null;
}
<h:form id="form">
#{bean.limpiar_objeto()}
</h:form>