我有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可以帮助我。 我想使用注释。 感谢
我稍微更改了我的代码,但它仍然无效。请进一步的建议。
@ManagedBean(name="projectData")
@SessionScoped
public class ProjectData {
...
@ManagedProperty(value="#{projectData}")
private ProjectData projectData;
错误com.sun.faces.mgbean.ManagedBeanCreationException
表示无法创建控制器bean,因为找不到projectData(模型bean)。
答案 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;
}