0

新しい を作成するフォームがありますEmployee。私のバッキング Bean は@SessionScoped. 最初の従業員を作成したとき、すべてがうまくいきました。ただし、2 番目の従業員を作成しようとすると、フォームの入力フィールドに最初の従業員のプロパティが表示されます。

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

EmployeeDBに保存後、インスタンスを再作成してください。

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

具体的な問題とは関係ありませんが、Bean の設計を再検討することを強くお勧めします。むしろ2つの豆に分割すべきではありませんか? 1 つのリクエスト/ビューはフォーム自体にスコープされ、別のセッションは実際のセッション スコープ データにスコープされ、リクエスト/ビュー スコープに挿入されます。このようにして、保存後に同じビューへのリダイレクトを実行して、クリーンなフォームから開始することができます (また、送信後にページを更新したときに、まったく同じ従業員が DB で複製されないという追加の利点があります)。 .

以下も参照してください。


更新に従って更新します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 に答える