Как внедрить ManagedBeans в JSF2.0 - PullRequest
2 голосов
/ 20 июля 2010

У меня есть Controller-ManagedBeans и Model-ManagedBeans (например, MVC-Pattern).

Вот мой контроллер:

   @ManagedBean
   @RequestScoped
    public class ProjectController {

 private ProjectData projectBean;   //The Model-ManagedBean (see below)!
 private IProjectService projectService;    //My Service-Layer

 public ProjectController(){
  init();
 }

 private void init(){
  projectBean = new ProjectData();
  projectService = new ProjectService();
 }

 public String saveProject() {
  projectService.addProject(projectBean.getProjectDTO());

  return ("");
 }
    }

... и ее вы можете увидеть мою модель, которая получает свои значения из лицевой стороны ...

@ManagedBean(name="ProjectData")
@SessionScoped
public class ProjectData {

 private ProjectDTO projectDTO;

 public ProjectData(){
  projectDTO = new ProjectDTO();
 }

 public ProjectDTO getProjectDTO() {
  return projectDTO;
 }

 public void setProjectDTO(ProjectDTO projectDTO) {
  this.projectDTO = projectDTO;
 }

 public String getTitle() {
  return projectDTO.getTitle();
 }

 public void setTitle(String title) {
  projectDTO.setTitle(title);
 }
}

Моя проблема сейчас в том, что это не работает. Я думаю, что мне нужно ввести зависимость между этими двумя классами. Но как? Есть ли JSF-pro, который может мне помочь. Я хотел бы использовать аннотации. Спасибо


Обновление после сообщения BalusC

Я немного изменил свой код, но он все еще не работает. Любые дальнейшие советы, пожалуйста.

@ManagedBean(name="projectData")
@SessionScoped
public class ProjectData {

...

@ManagedProperty(value="#{projectData}")
private ProjectData projectData;

Ошибка com.sun.faces.mgbean.ManagedBeanCreationException говорит о том, что bean-компонент контроллера не может быть создан, потому что projectData (bean-компонент модели) не найден ..

Ответы [ 2 ]

4 голосов
/ 20 июля 2010

Это должно работать:

@ManagedProperty(value="#{ProjectData}")
private ProjectData projectBean

Тем не менее, обычная практика - начинать имена экземпляров со строчной буквы.Вы также не делаете в реальном

ProjectData ProjectData = new ProjectData();

, а скорее

ProjectData projectData = new ProjectData();

Если вы опустите (name="ProjectData") в @ManagedBean, тогда он автоматически по умолчанию будет projectData.


Согласно вашему обновлению:

Ошибка com.sun.faces.mgbean.ManagedBeanCreationException говорит о том, что bean-компонент контроллера не может быть создан, поскольку projectData (bean-компонент модели) не найден.

На самом деле более показательно, что свойство projectData не может быть найдено.Свойство не доступно для записи.Другими словами, сеттер отсутствует.В будущем, пожалуйста, не перефразируйте сообщения об ошибках, а просто скопируйте их.

3 голосов
/ 21 июля 2010

Хорошо, ребята, я нашел ответ:

в моем контроллере отсутствуют методы get и set:

/*
 * Getter and Setter
 */
public ProjectData getProjectData() {
    return projectData;
}

public void setProjectData(ProjectData projectData) {
    this.projectData = projectData;
}

Ссылка

...