我的applicationContext.xml:
<bean id="studentService" class="com.coe.StudentService">
<property name="studentProfile" ref="studentProfile" />
</bean>
<bean id="studentProfile" class="com.coe.student.StudentProfile">
</bean>
我的web.xml:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
我的课程:
StudentService{
private StudentProfile studentProfile;
//has appropriate getters/setters
}
StudentProfile{
private String name;
//has getter/setter
}
我有一个调用studentService.studentProfile.name的jsp,错误说studentProfile为null
我的假设是,当服务器启动时,Spring会根据请求实例化所有对象,所以当调用StudentService时,Spring也不会设置StudentProfile吗?
答案 0 :(得分:2)
通常使用Spring和Web应用程序,您将拥有一个传递到JSP视图的DispatcherServlet和一堆控制器。这些控制器将由Spring管理。
如果你想在不使用DispatcherServlet的情况下直接进入JSP,那么你需要一些方法来第一次注入你的页面(ContextLoaderListener不会这样做)。也就是说,您必须使用JSP初始化代码(例如
)显式查找初始bean[免责声明:未经测试]
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
<%!
private StudentService studentService;
public void jspInit() {
studentService = (StudentService) WebApplicationContextUtils.
getRequiredWebApplicationContext(getServletContext()).
getBean("studentService");
}
%>
答案 1 :(得分:1)
也许你的name属性是null项。尝试设置值
<property name="name" value="my value"/>
答案 2 :(得分:0)
如果您愿意使用注释,则不是您的问题的答案,而是您问题的可能解决方案:
Web.xml中
<!-- Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>spring.xml</param-value>
</context-param>
Spring.xml
<context:component-scan base-package="com.coe" />
Java代码
@Service
StudentService{
@Autowired
private StudentProfile studentProfile; }
@Repository//???
StudentProfile{
private String name;}
那说我理解为什么StudentProfile会成为一个bean(假设每个学生都有个人资料)并且StudentService会引用一个StudentProfile,但这可能只是你的术语......(或者我缺乏理解)物)