У меня проблема с перенаправлением с JSF и красивыми лицами. Я новичок в этом, и мне нужна помощь, так как я не могу перенаправить на работу, как я этого хочу.
В основном у меня есть это в моей красивой конфигурации:
<url-mapping id="newProject">
<pattern value="/newProject/" />
<view-id value="/faces/project/newProject.xhtml" />
<action>#{projectController.initNewProject}</action>
</url-mapping>
<url-mapping id="project">
<pattern value="/project/" />
<view-id value="/faces/project/projectIdx.xhtml" />
</url-mapping>
Функция initNewProject выглядит так:
public String initNewProject() throws IOException {
project = this.createProject(123415, "1234578943148", "KB25");
System.out.println(project);
return "pretty:project";
}
где проект — это поле в ProjectController:
@Named
@ConversationScoped
public class ProjectController implements Serializable {
private transient Project project;
...
Перенаправление работает так, как я хочу, поскольку URL-адрес меняется с ../newProject/ на ../project/ и отображается содержимое /faces/project/newProject.xhtml. Но иногда во время перенаправления вызывается конструктор ProjektController и обнуляет проект поля.
Если я изменюсь
return "pretty:project";
to
return "/project/projectIdx.xhtml";
все работает нормально. Содержимое проекта отображается на веб-странице. Однако URL-адрес не меняется. Он остается ../newProject/, и если пользователь нажимает F5, он создает новый проект, что плохо.
По некоторым другим причинам я не могу сохранить проект в сеансе, поэтому для меня это не вариант.
Я не хочу, чтобы перенаправление воссоздавало контроллер, поскольку я хочу, чтобы newProject.xhtml отображал содержимое проекта, созданного во время initNewProject.
Как этого добиться?
Большое спасибо!
Майкл