如何在JSF2.0中注入ManagedBeans

时间:2010-07-20 14:46:51

标签: jsf dependency-injection annotations jsf-2

我有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 个答案:

答案 0 :(得分:4)

这应该有效:

@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。该物业不可写。换句话说,缺少setter。将来请不要重新记录错误消息,只需复制它们即可。

答案 1 :(得分:3)

好的,我找到了答案:

我的控制器中缺少get和set方法:

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

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

Reference