[JSP] useBean problemen

Pagina: 1
Acties:

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Ik ben aan het spelen met cewolf (eigenlijk een JFreeChart "plus"), en heb het tutorial doorgenomen. Nu heb ik cewolfserver wel weten te lanceren maar de voorbeeld jsp, die ik aanroep veroorzaakt een foutmelding die gerelateerd is aan dit stuk:
code:
1
<jsp:useBean id="pageViews" class="com.philips.sc.fap.util.ChartDataProducer" />


de volgende foutmelding krij ik te zien:
code:
1
2
[Engine] ApplicationDispatcher[/FAPCoreWeb] Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /pages/equipment/view/tool/ToolView.jsp(5,0) The value for the useBean class attribute com.philips.sc.fap.util.ChartDataProducer is invalid.


nu heb ik heel veel "fora" doorgenomen met het betreffende foutmelding en de volgende oplossingen werden aangeboden:
- Zet een leeg contructor in ChartDataProducer
- voeg spatie toe voor /> stukje
- voeg een scope toe aan useBean
- verander van "class=" naar "type="

Ik heb zo'n beetje alle mogelijkheden uitgeprobeerd die ik kon vinden. Het enige dat opviel was het gebruik van "type=" dus:
code:
1
<jsp:useBean id="pageViews" type="com.philips.sc.fap.util.ChartDataProducer" />

Die leidde naar een volgende foutmelding:
code:
1
2
3
4
ApplicationDispatcher[/FAPCoreWeb] Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: com/philips/sc/fap/util/ChartDataProducer
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:1618)

Wat mis ik nog in mijn configuratie?
Ik maak gebruik van de volgende omgeving:
Eclipse 3.0.1
JBoss 4.0.0

  • Standeman
  • Registratie: November 2000
  • Laatst online: 23:08

Standeman

Prutser 1e klasse

Ik denk dat de class ChartDataProducer nergens te vinden is in de classpath van de betreffende context (ik weet niet precies hoe dat werkt in JBOSS). Het heeft op zich niets te maken met useBean.

Onder tomcat kan je het bereiken om de jar (als je die gebruikt) in de dir /context/web-inf/lib of de class in /context/web-inf/classes/com/philips/sc/fap/util te zetten.

[ Voor 31% gewijzigd door Standeman op 13-05-2005 11:00 ]

The ships hung in the sky in much the same way that bricks don’t.


  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
usebean werkt als volgt:

als je alleen maar een class definieert, dan zal deze tag dus altijd een object van dat type gaan instantieren. Dit vereist dus dat die klasse een public no arguments constructor heeft.
Dit is dus simpelweg jouw probleem. Voeg een lege constructor toe. Echter als het zo is dat je die klasse wel altijd met een argumented constructor wilt maken, zul je hem voor je op deze pagina komt alvast moeten instantieren in de gewenste scope zetten. De usebean kan hem dan uit de scope halen en hoeft hem niet zelf te constructen.

wbt het type attribuut: dit is completerend aan het class attribuut. type moet dus gelijk aan class zijn, een superclass zijn van class, of een interface die door class geimplementeerd wordt. Als je het weglaat dan wordt het geinstantieerde object van het type 'class'. Type is dus optioneel, en gebruik je alleen als je strong typed code wilt gebruiken. Dat is lief voor je compiler en ook iets efficienter voor je code. Gebruik je het niet dan worden methods gewoon dmv introspectie geresolved.

  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
Standeman schreef op vrijdag 13 mei 2005 @ 10:58:
Ik denk dat de class ChartDataProducer nergens te vinden is in de classpath van de betreffende context (ik weet niet precies hoe dat werkt in JBOSS). Het heeft op zich niets te maken met useBean.
Heeft niets met het classpath te maken en heeft wel met useBean te maken.
Als je alleen een type attribuut opgeeft, dan probeert useBean een SERIALIZED objectname (vandaar de slashes) op te zoeken. Omdat er nog geen instantie is zie je die foutmelding.
Overigens is het natuurlijk nog steeds mogelijk dat die klasse daadwerkelijk niet in het classpath staat, maar neem aan dat je dat wel gecontroleerd hebt..

[ Voor 15% gewijzigd door watzie op 13-05-2005 11:09 . Reden: verduidelijkt ]


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Extra info:
project structuur bestaat uit:
src (de sourcecode)
webmodule
ejbmodule

output map is bin (waar de .class bestanden worden gezet)

er wordt een .ear bestand aangmaakt en in JBoss gedeployed.
De .ear bestand heeft in zich:
de ejbmodule.jar (waar de ChartDataProducer.class zich bevind)
de webmodule.war
en application.xml bestand (die bevat simpele module info)

Dus in principe wordt de klasse meegepakt dus moet toch te vinden zijn?

Inmiddels heb ik al een standaard leeg contructor in de klasse ChartDataProducer staan, maar de useBean foutmelding blijft staan.

[ Voor 13% gewijzigd door turkosh op 13-05-2005 11:28 ]


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Ik heb het probleem opgelost! :Y)

mijn ChartDataProducer zat in het gedeelte van src die niet werd gekopieerd naar de web-inf/classes in het webmodule.war.
Kennelijk moet dat wel. Dus heb ik de klasses onder webinterface geddelte van src gezet, en nu wordt het automatisch meegenomen in de .war bestand.
Nu kan ik er verder mee spelen.
Bedankt voor de hulp. _/-\o_

Ik heb de useBean als volgt aangepast
code:
1
<jsp:useBean id="pageViews" class="com.philips.sc.fap.webinterface.ChartDataProducer" />


Trouwens, in de jsp krijg ik wel een fout te zien:

Cannot compile against source model ChartDataProducer issued from ChartDataProducer.java

Iemand een idee om dit op te lossen? De code werkt namelijk wel, maar de jsp editor klaagt over dit.

[ Voor 35% gewijzigd door turkosh op 13-05-2005 11:53 ]


  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
turkosh schreef op vrijdag 13 mei 2005 @ 11:49:
Ik heb het probleem opgelost! :Y)

mijn ChartDataProducer zat in het gedeelte van src die niet werd gekopieerd naar de web-inf/classes in het webmodule.war.
Kennelijk moet dat wel. Dus heb ik de klasses onder webinterface geddelte van src gezet, en nu wordt het automatisch meegenomen in de .war bestand.
Nu kan ik er verder mee spelen.
Bedankt voor de hulp. _/-\o_
lol B) veel succes verder

  • Standeman
  • Registratie: November 2000
  • Laatst online: 23:08

Standeman

Prutser 1e klasse

watzie schreef op vrijdag 13 mei 2005 @ 11:50:
[...]


lol B) veel succes verder
Dus ik had toch (een beetje) gelijk :P ;)

The ships hung in the sky in much the same way that bricks don’t.


  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Ik dacht ik ga maar op mijn topic weer door, omdat deze probleem met hetzelfde onderwerp te maken heeft.

De zelfde jsp geeft de volgende probleem aan:
Cannot compile against source model ChartDataProducer issued from ChartDataProducer.java

Maar als ik het project deploy dan werkt de pagina gewoon netjes. Ik krijg de chart van ChartDataProducer wel te zien. :?

Wie weet hoe ik deze foutmelding kan elimineren?

  • watzie
  • Registratie: Juni 2001
  • Laatst online: 21-04 07:06
Wat voor IDE gebruik je eigenlijk?

Ik zou het volgende (of allemaal) proberen:
- een full rebuild
- je hele classfiles directory leegmaken en opnieuw compileren
- installatie verwijderen uit tomcat inclusief alle genereerde directories en bestanden en opnieuw deployen van je war
- tenslotte in de jsp die het niet snapt een willekeurige spatie backspace doen (waardoor je niks verandert maar de file wel een nieuwe datum geeft waardoor hij opnieuw gecompileerd moet worden).

Bovenstaande suggesties doe ik omdat mogelijk je compiled classes niet meer met je sources overeenkomen, je build is 'dirty' geworden. Gebeurt wel eens...
Pagina: 1