PDA

View Full Version : Tomcat and Spring errors


Master
Apr 21st, 2007, 02:08 PM
Hi!!
I have folowing problem:

I wrote a spring programm without the spring tags and it works good.

As next i will use the spring tags <spring:bind .... and after i have insert them i get folowing errors:

1) on the Tomcat Server
ERROR [org.springframework.web.servlet.tags.BindTag] - Neither Errors instance nor plain target object for bean name 'db' available as request attribute
javax.servlet.jsp.JspTagException: Neither Errors instance nor plain target object for bean name 'db' available as request attribute

2) on my jsp page
org.apache.jasper.JasperException: Exception in JSP: /WEB-INF/jsp/index.jsp:95

92: <span class="stdFont">
93: <label></label>
94: </span></td>
95: <spring:bind path="db.loginname">
96: <td width="159" class="stdFont">
97: <input type="text" name="loginname" value="<c:out value="${status.value}"/>"/>
98: </td>


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.netbeans.modules.web.monitor.server.MonitorFil ter.doFilter(MonitorFilter.java:368)
...

root cause

javax.servlet.ServletException: Neither Errors instance nor plain target object for bean name 'db' available as request attribute
org.apache.jasper.runtime.PageContextImpl.doHandle PageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.java:791)
org.apache.jsp.WEB_002dINF.jsp.index_jsp._jspServi ce(index_jsp.java:307)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:314)
...

root cause

javax.servlet.jsp.JspTagException: Neither Errors instance nor plain target object for bean name 'db' available as request attribute
org.springframework.web.servlet.tags.BindTag.doSta rtTagInternal(BindTag.java:118)
org.springframework.web.servlet.tags.RequestContex tAwareTag.doStartTag(RequestContextAwareTag.java:7 7)
org.apache.jsp.WEB_002dINF.jsp.index_jsp._jspServi ce(index_jsp.java:164)
org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet .java:802)
....

and so on

some parts of source:

jsp

...
<spring:bind path="db.loginname">
<td width="159" class="stdFont">
<input type="text" name="loginname" value="<c:out value="${status.value}"/>"/>
</td>
<td width="50%">
<font color="red"><c:out value="${status.errorMessage}"/></font>
</td>
</spring:bind>
...

servlet


<bean id="loginController" class="LoginController">
<property name="sessionForm"><value>true</value></property>
<property name="commandName"><value>db</value></property>
<property name="commandClass"><value>KundeDataBase</value></property>
<property name="validator" ref="kundeDataValidator"></property>
<property name="sessionFactory" ref="sessionFactory"></property>
<property name="formView"><value>index</value></property> <!-- View in der sich das Formular befindet -->
<!-- <property name="successView"><value>welcome.html</value></property> --> <!-- Nächsten Controller callen -->
<property name="successView"><value>welcome.html</value></property>
</bean>

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlH andlerMapping">
<property name="mappings">
<props>
<prop key="/index.html">indexController</prop>
<prop key="/welcome.html">loginController</prop>
</props>
</property>
</bean>

<bean id="kundeDataValidator" class="KundeDataValidator"></bean>


my class

public class KundeDataBase {
private String loginname;
private String pw;
/** Creates a new instance of KundeDataBase */
public KundeDataBase(String name, String p)
{
loginname = name;
pw = p;
}
public void setloginname(String name)
{
loginname = name;
}
public String getloginname()
{
return loginname;
}
.... getters and setters

my validator

public KundeDataValidator() {
}

public boolean supports(Class clazz) {
return clazz.equals(KundeDataBase.class);
}

public void validate(Object obj, Errors errors) {
KundeDataBase db = (KundeDataBase) obj;
if (db == null)
{
errors.rejectValue("loginname", "error.not-specified", null,
"Value required.");

}else
{
if(db.getloginname().trim().length() <= 0)
errors.rejectValue("loginname","error.too-low", null, "long");
else
{
if(db.getpw().trim().length() <= 0)
errors.rejectValue("pw","error.too-low", null, "short");
}
}
}

}

my controller

public class LoginController extends SimpleFormController
{
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
Object command, BindException errors) throws Exception {

System.out.println("TEST");
KundeDataBase db = (KundeDataBase) command;
List mylist = (List) h.find("from Kunde as k where k.KLoginname = 'asdf' and k.KPasswort = 'asdf'");

if(mylist.size() > 0)
{

return new ModelAndView(this.getSuccessView(), errors.getModel());
}
else
{
return new ModelAndView("index","","");
}

}

protected Object formBackingObject(HttpServletRequest request) throws ServletException {

KundeDataBase db = new KundeDataBase(request.getParameter("loginname").toString(), request.getParameter("pw").toString());
return db;
}

public void setSessionFactory (SessionFactory sf) {
h= new HibernateTemplate(sf);
System.out.println("HIBERNATE!!!!!!!!!!!!");
}

private HibernateTemplate h;
}


has anyone some ideas ???
pls help me

cwilkes
Apr 21st, 2007, 05:12 PM
Didn't you already ask this question? Anyway this:

return new ModelAndView("index","","");


is probably not what you want to do. If you want to return a simple Map of one value you do something like this:

return new ModelAndView("index", "foo", foo)


Or something like this instead of what you have:

return new ModelAndView("index");

Master
Apr 21st, 2007, 06:36 PM
no i didn't because I have tried your suggestion but it dosen't help.

I have fixed up a part of this problem because i have had a mistake in my hibernate source, but hibernate works now very well.

The problem with the spring tags isn't fixed. So my program works very well without the <spring:bind tags but when i will use them i get the list errors and the reason for this errors didn't depend on the


return ModelAndView("index","foo",foo);
return ModelAndView("index","","");


but thx i have tried to use your suggestion but it doesn't depend on the ModelAndView-parameters. :(

Is it necassary to use some other specific definitions or anything else to make it possible to use this tags

because i have definde the libs on my jsp page

<%@ taglib prefix="spring" uri="/WEB-INF/tld/spring.tld" %>


but i am not able to access the instance per name, that i have defined in my servlet

...
<property name="commandName"><value>db</value></property>
...

so i get the error message
javax.servlet.ServletException: Neither Errors instance nor plain target object for bean name 'db' available as request attribute


:confused:

srimmalapudi
Apr 27th, 2007, 04:51 PM
Hi,

I think changing the following code (in bold) in your servlet will solve your problem.

<prop key="/index.html">loginController</prop>

I don't know what you have in indexController as that was not posted but the above change will solve your problem positively.

Let me know if the problem is solved after making this change.

Thanks,
Sudheer