У меня есть веб-приложение, использующее JSF2 с объектами JPA, сеансные bean-компоненты ejb без сохранения состояния в качестве объектов фасада / ejb и управляемые bean-компоненты (с ограничениями по запросу и представлению) в качестве контроллеров, предоставляющих бизнес-методы, управляемые контроллеры извлекают данные из введенных сеансовых компонентов без сохранения состояния.
но я не понимаю, как перемещаться и сохранять данные в представлениях в моих контроллерах в этой среде, например:
У меня есть страница просмотра 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(..)
не выполняет поиск, просто создайте параметр из идентификатора отдела и передайте его через return "employeeView?departmentId=X";
, и у него есть конструктор, а затем выполните поиск, если идентификатор присутствует?
может мне помочь с правильным способом реализовать это в среде EJB / JSF2
Благодарность