jsf - JSF2.0中如何注入(inject)ManagedBean

标签 jsf dependency-injection annotations jsf-2

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

这是我的 Controller :

   @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 ("");
 }
    }

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

@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);
 }
}

我现在的问题是它不起作用。我想我需要在这两个类之间注入(inject)依赖关系。但是怎么办?有没有可以帮助我的 JSF-pro。 我想使用注释。 谢谢


BalusC 发帖后更新

我稍微修改了我的代码,但还是不行。请提供任何进一步的建议。

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

...

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

错误 com.sun.faces.mgbean.ManagedBeanCreationException 表示无法创建 Controller bean,因为找不到 projectData(模型 bean)..

最佳答案

这应该有效:

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

也就是说,通常的做法是以小写开头的实例名称。你也不做真

ProjectData ProjectData = new ProjectData();

而是

ProjectData projectData = new ProjectData();

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


根据您的更新:

The error com.sun.faces.mgbean.ManagedBeanCreationException says that the controller bean can not be created because projectData (the model-bean) is not found.

实际上更能说明property projectData 找不到。该属性不可写。换句话说,二传手不见了。以后请不要改写错误消息,只需复制粘贴即可。

关于jsf - JSF2.0中如何注入(inject)ManagedBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3291178/

相关文章:

c# - Entity Framework DbContext 未使用依赖注入(inject)进行处理

java - Hibernate的ManyToMany简单使用

javascript - 禁用命令按钮,直到勾选复选框

jsf - PrimeFaces 远程命令未调用

css - 对齐 h :outputText inside a p:datatable

c++ - 使用 gcc 插件获取类注释

java - [学习EJB] : annotation type is not applicable to this kind of declaration?

java - 类型 "Interface"与注入(inject)点 [BackedAnnotatedField] @Inject "Implementation"处的限定符 @Default 的依赖关系不满足

spring - 从 jar 中动态加载 spring bean 以及依赖的 bean

c++11 - 依赖注入(inject)中的 move 语义