JPA エンティティを持つ JSF2、ファサード/ejb オブジェクトとしてのステートレス ejb セッション Bean、およびビジネス メソッドを公開するコントローラーとしてのマネージド Bean (リクエストおよびビュー スコープ) を使用する Web アプリがあり、マネージド コントローラーは注入されたステートレス セッション Bean からデータをプルしています。
しかし、この環境でコントローラーのビュー全体でデータをナビゲートして保持する方法がわかりません。たとえば、次のようになります。
Department オブジェクトのリストを表示する jsf2 ビュー ページ (departmentView.xhtml) があり、各行には編集項目があります。[編集] をクリックして、新しいページをロードし、新しいページにその部門のリストまたは従業員を表示したいので、選択した部門を渡す従業員コントローラーを呼び出します。
action="#{employeeController.getEmployeeListForADepartment(ithDepartment)}"
ここに私の departmentView.xhtml のスニペットがあります
<h:dataTable id="table" value="#{departmentController.departmentList}"
var="ithDepartment">
...
<h:column>
<h:commandLink id="editId" value="Edit"
action="#{employeeController.getEmployeeListForADepartment(ithDepartment)}" />
</h:column>
私のemployeeControllerは次のように定義されています
ManagedBean(name = "employeeController")
@ViewScoped
public class EmployeeController implements Serializable {
...
private List<Employee> employeeList = new ArrayList<Employee>();
...
@EJB
private com.ejb.session.EmployeeFacade ejbEmployeeFacade;
...
public List<Employee> getEmployeeListForADepartment(Department dept)
{
if(employeeList==null || employeeList.isEmpty())
employeeList = ejbEmployeeFacade.findEmployeesByDepartment(dept);
// now i want to navigate to the employee view showing these employees for the
// selected department.
// but this navigation below triggers creating a new EmployeeController
// and i lose my employeeList
return "employeeView";
}
私は本当にjsfセッションスコープの使用を避けたいと思っており、これを行う方法があると信じています.jsf/ejbの本でそれについて読んでいません。
大声で考えて、おそらくEmployeeController.getEmployeeListForADepartment(..)
ルックアップを行う必要はありません。部門IDからパラメーターを作成し、それを介して渡しreturn "employeeView?departmentId=X";
、IDが存在する場合はコンストラクターにルックアップを実行させますか?
EJB/JSF2環境でこれを実装する適切な方法を教えてください
ありがとう