[Java/Spring]ClassNotFoundException *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Josvds
  • Registratie: November 2004
  • Laatst online: 26-08 20:42
Ik ben samen met iemand bezig voor het makenv an een Java Spring MVC website.
Nu zijn we begonnen met geen kennis van Spring en nu weten we een klein beetje.
Echter komen we er nu niet uit hoe je rechtstreeks een object kunt meegeven aan een view.
Standaard variable meegeven is gelukt, echter het meegeven van een object als student lukt me niet.
Daarintegen is het wel weer gelukt om dit via een POST mee te geven en wanneer je dat doet kun je in een get ook wat meegeven. Wat doe ik hier verkeerd iemand een idee?

Wat heb ik nu:

VIEW
<h2>Object weergeven</h2>
<p>Naam: ${student.naam}</p>
<p>School: ${student.school}</p>

Model
public class student
{
// ##### VARIABLE ##### \\

private String naam;


// ##### GET & SET ##### \\

public String getNaam()
{
return naam;
}
public void setNaam(String naam)
{
this.naam = naam;
}
}

Controller
@Controller
@RequestMapping("/home.htm")
public class homeController
{
/**
* De standaard weergave van home.htm
* @param model
* @return de .jsp file die weergegeven moet worden
*/
@RequestMapping(method = RequestMethod.GET)
public String showHome(ModelMap model, @ModelAttribute("student") student Student, BindingResult result)
{
// Voorbeeld 1 - Hier wordt binnen de model een attribuut toegevoegd
model.addAttribute("naam", "Jos");

// Voorbeeld 2 - Hier wordt een object aan het model toegevoegen
Student.setNaam("naam");
model.addAttribute("student", Student);

// De bestandsnaam van .jsp file dat weergegeven moet worden
return "home";
}
}

Dispatcher-Servlet
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframewor...eans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframewor.../spring-context-2.5.xsd">


<!--
Benodigde packages voor de annotation afhandeling
-->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

<!--
De package waarin alle controllers staan
-->
<context:component-scan base-package="controllers" />

</beans>

Acties:
  • 0 Henk 'm!

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 17-09 16:09

NetForce1

(inspiratie == 0) -> true

Wat gaat er precies fout, krijg je een exceptie als je de pagina opvraagt? Staat er een stacktrace op de console of in je log-file?
En om code te posten hebben we de [code=taal] tag.

[ Voor 16% gewijzigd door NetForce1 op 16-10-2009 08:36 ]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Acties:
  • 0 Henk 'm!

  • IntToStr
  • Registratie: December 2003
  • Laatst online: 11:41
Ten eerste: het is conventie om hoofdletters te gebruiken bij een class en kleine letters bij variabelen, dus class Student en variabele student.

Aangezien het om een Get gaat heb je hier in principe geen parameters voor de methode showHome nodig met wat je hier doet. Zelf kies ik er meestal voor om een ModelAndView te retourneren. Hierin kun je met addObject een object aan je view toevoegen.

Om meer zinnigs te zeggen heb ik toch echt meer informatie nodig over wat er wel/niet goed/fout gaat.

Acties:
  • 0 Henk 'm!

  • Josvds
  • Registratie: November 2004
  • Laatst online: 26-08 20:42
Ik heb dat ook geprobeerd gehad met ModelAndView als return waarde ipv string. Dat heeft ook gewerkt, echter wanneer ik dan een model in een post form wou gebruiken ging het fout.

Ik heb nu de parameters weg gehaald en een nieuw object van Student aangemaakt, ook dit veranderd classe met hoofdletter en de student variable met kleine letter.

De foutmeldingen die ik nu krijg:

java.lang.ClassNotFoundException: models.Student

java.lang.NoClassDefFoundError: models/Student

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: models/Student

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Controller
@RequestMapping("/home.htm")
public class homeController
{
    /**
    * De standaard weergave van home.htm
    * @param model
    * @return de .jsp file die weergegeven moet worden
    */
    @RequestMapping(method = RequestMethod.GET)
    public String showHome(ModelMap model)
    {
        // Voorbeeld 1 - Hier wordt binnen de model een attribuut toegevoegd
        model.addAttribute("naam", "Jos");

        // Voorbeeld 2 - Hier wordt een object aan het model toegevoegen
        Student student    = new Student();
        student.setNaam("naam");
        model.addAttribute("student", student);

        // De bestandsnaam van .jsp file dat weergegeven moet worden
        return "home";
    }
}

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 17-09 12:49

Nick_S

++?????++ Out of Cheese Error

java.lang.ClassNotFoundException: models.Student
En welk gedeelte van de foutmelding snap je niet? Hij kan de class models.Student niet vinden, ergo hij is niet gecompileerd. Hoe run je je applicatie? Vanuit een IDE of maak je zelf een war aan.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
offtopic:
Ik heb je titel even aangepast, als je zelf een beter voorstel heb kun je een Topic Report doen. *** Over topictitels in PRG - lezen voor topic openen!!! ***

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Josvds
  • Registratie: November 2004
  • Laatst online: 26-08 20:42
Ik snap wel dat hij die klasse nie vond maar hoe kun je in annotations vorm de klasse defineren?
Dat snapte ik niet, als je gebruik maakt van een POST met daarin @ModelAttribute dan werkte het wel als je deze weg liet werkte het niet.

Ik maak gebruik van Netbeans in combinatie met Tomcat server. Test dan ook vanuit Netbeans zelf.

Titel aangepast, bedankt, mijn excuses.

[ Voor 6% gewijzigd door Josvds op 16-10-2009 12:20 . Reden: Titel aanpassing ]


Acties:
  • 0 Henk 'm!

  • Josvds
  • Registratie: November 2004
  • Laatst online: 26-08 20:42
Ik snap er helemaal niets van maar nu werkt hij wel zoals ik hem al eerder geprobeerd heb, alles werkt nu, net of hij in een cache blijft hangen, maar clean en build, CTRL + F5 alles bewijst dat het nu gewoon werkt.

Ik hoop dat het blijft werken.. Ga nu alles nog eens doorlopen. Hier iig de code voor degene die ook willen weten hoe dat gezamelijk werkt.

home.jsp
Java Server Page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- Standaard pagina codering -->
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!-- Benodigde functies -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>

        <!-- Voorbeeld 1 -->
        <h2>Variable weergeven</h2>
        <p>${naam}</p>

        <!-- Voorbeeld 2 -->
        <h2>Object weergeven</h2>
        <p>${student.naam}</p>

        <!-- Voorbeeld 3 -->
        <h2>Lijst weergeven</h2>
        <c:forEach items="${lijst}" var="getal">
            <p><c:out value="${getal}" /></p>
        </c:forEach>
    </body>
</html>


homeController.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controllers;

import models.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author Jos
 */
@Controller
@RequestMapping("/home.htm")
public class homeController
{
    @RequestMapping(method=RequestMethod.GET)
    public String showHome(ModelMap model)
    {
        // Voorbeeld 1 - Variable weergeven
        model.addAttribute("naam", "vb1-Jos");
        
        // Voorbeeld 2 - Object weergeven
        Student student = new Student();
        student.setNaam("vb2-Jos");
        model.addAttribute("student", student);

        // Voorbeeld 3 - Lijst weergeven
        int nummers[]   = new int[5];
        for(int i = 1; i <= 5; i++)
        {
            nummers[i-1]  = i;
        }
        model.addAttribute("lijst", nummers);

        // Teruggave te laten .jsp
        return "home";
    }
}


Student.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package models;

/**
 * Een voorbeeld model
 * @author Jos
 */
public class Student
{
    // ##### VARIABLE ##### \\

    private String naam    = null;


    
    // ##### SET & GET ##### \\
    
    public String getNaam()
    {
        return naam;
    }
    public void setNaam(String iNaam)
    {
        this.naam = iNaam;
    }

}


dispatcher-servlet.xml
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">


    <!--
    Benodigde packages voor de annotation afhandeling
    -->
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

    <!--
    De package waarin alle controllers staan
    -->
    <context:component-scan base-package="controllers" />

</beans>
Pagina: 1