我有 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/