I’m moving my knowledge to spring and I dont really get how this is working. I’m trying to make a very basic example to make it work, but I couldn’t make it work :-((
ApplicationContext.xml
<bean id="serviceTest" class="es.mov.jose.agenda.ServiceTest">
</bean>
<bean id="serviceMovility" class="es.mov.jose.agenda.ServiceMovility">
<property name="serviceTest" ref="serviceTest" />
</bean>
<bean name="/jose/req1.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="jose/req1" />
</bean>
ServiceMovility.java
package es.mov.jose.agenda;
public interface ServiceMovility {
public String callTest();
}
ServiceMovilityImpl.java
package es.mov.jose.agenda;
import es.mov.jose.agenda.ServiceMovility;
public class ServiceMovilityImpl implements ServiceMovility {
private ServiceTest serviceTest;
public String callTest() {
return serviceTest.getValue();
}
}
ServiceTest.java
package es.mov.jose.agenda;
public interface ServiceTest {
public String getValue();
}
ServiceTestImpl.java
package es.mov.jose.agenda;
import es.mov.jose.agenda.ServiceTest;
public class ServiceTestImpl implements ServiceTest {
public String getValue() {
return "OK";
}
}
and finally my req1.jsp
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="es.mov.jose.agenda.ServiceMovility"%>
<%@ page import="es.mov.jose.agenda.ServiceMovilityImpl"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib prefix="sp-forms" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<jsp:useBean id="serviceMovility" scope="request" class="es.mov.jose.agenda.ServiceMovilityImpl" />
<div class="main" >
<%
String result = serviceMovility.callTest();
out.println(result);
%>
</div>
</body>
</html>
It call serviceMovility perfectly but fail calling serviceTest inside callTest method, it says java.lang.NullPointerException
¿Should I include the bean serviceMovility in that way in jsp file? ¿Why spring doesn’t inject serviceTest initialized on serviceMovility?
I spent 2 days on this but I failed on all my solutions. I don’t know what to do.
Thanks in advance.
Use implementations instead of interfaces while defining beans:
plus, in your *Impl classes define setters to injected dependencies, i.e. in
ServiceMovilityImpl:EDIT:
You’re doing it wrong… Don’t inject beans into JSP (via
jsp:useBean), but directly to Controller. Define your own controller:Edit your
ApplicationContext.xmlas I did above (useReq1ControllerinsteadParameterizableViewController), and in JSP you’ll have${callTest}variable: