如何在 JSF2.0 中注入 ManagedBeans

Sve*_*ven 2 jsf annotations dependency-injection jsf-2

我有 Controller-ManagedBeans 和 Model-ManagedBeans(如 MVC 模式)。

这是我的控制器:

   @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 ("");
 }
    }
Run Code Online (Sandbox Code Playgroud)

...你可以看到我的模型,它从面中获取其值...

@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);
 }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是现在它不起作用。我想我需要注入这两个类之间的依赖关系。但如何呢?有 JSF-pro 可以帮助我吗?我想使用注释。谢谢


BalusC 发帖后更新

我稍微改变了我的代码,但它仍然不起作用。如有任何进一步的建议,请。

@ManagedBean(name="projectData")
@SessionScoped
public class ProjectData {
Run Code Online (Sandbox Code Playgroud)

...

@ManagedProperty(value="#{projectData}")
private ProjectData projectData;
Run Code Online (Sandbox Code Playgroud)

该错误com.sun.faces.mgbean.ManagedBeanCreationException表明无法创建控制器 bean,因为找不到 projectData(模型 bean)。

Bal*_*usC 5

这应该有效:

@ManagedProperty(value="#{ProjectData}")
private ProjectData projectBean
Run Code Online (Sandbox Code Playgroud)

也就是说,通常的做法是实例名称以小写字母开头。你也没有真正做

ProjectData ProjectData = new ProjectData();
Run Code Online (Sandbox Code Playgroud)

反而

ProjectData projectData = new ProjectData();
Run Code Online (Sandbox Code Playgroud)

如果省略 the (name="ProjectData")@ManagedBean那么它将自动默认为projectData


根据您的更新:

该错误com.sun.faces.mgbean.ManagedBeanCreationException 表明无法创建控制器 bean,因为未找到 projectData(模型 bean)。

实际上更能说明问题的是无法找到属性projectData。该属性不可写。换句话说,二传手失踪了。将来请不要重新表述错误消息,而只需复制粘贴它们。