как перейти от одного представления к следующему в JJF2 / JPA / EBJ без сохранения состояния (управляемые контроллеры JSF) и сохранить данные - PullRequest
1 голос
/ 07 декабря 2011

У меня есть веб-приложение, использующее JSF2 с объектами JPA, сессионные компоненты ejb без состояния в качестве объектов моего фасада / ejb и управляемые компоненты (область запросов и представления) в качестве контроллеров, представляющих бизнес-методы, управляемые контроллеры извлекают данные из внедренного сеанса без состоянияbeans.

, но я запутался, как перемещаться и сохранять данные по представлениям в моих контроллерах в этой среде, например:

У меня есть страница представления jsf2 (DepartmentView.xhtml), которая отображаетсписок объектов отдела и каждая строка имеет элемент редактирования.Нажав кнопку «Изменить», я хочу загрузить новую страницу и отобразить список или список сотрудников для этого отдела на новой странице, поэтому я вызываю контроллер сотрудника, передавая ему выбранный отдел

action="#{employeeController.getEmployeeListForADepartment(ithDepartment)}" 

, здесь приведен фрагмент моего отдела..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

спасибо

1 Ответ

0 голосов
/ 07 декабря 2011

Используйте простой GET <h:link> в исходном представлении для передачи идентификатора отдела и <f:viewParam> в целевом представлении для преобразования и установки отдела.

* 1005 Е.Г. *

<h:link id="editId" value="Edit" outcome="employeeView">
    <f:param name="departmentId" value="#{ithDepartment.id}" />
</h:link>

с

<f:metadata>
    <f:viewParam name="id" value="#{editDepartmentBean.department}"
        converter="#{departmentConverter}" converterMessage="Bad request. Unknown department."
        required="true" requiredMessage="Bad request. Please use a link from within the system." />
</f:metadata>

и

@ManagedBean
@ViewScoped
public class EditDepartmentBean {

    private Department department;

    // ...
}

Смотри также:

...