[J2ee] JSF Custom component probleem

Pagina: 1
Acties:

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

Topicstarter
Momenteel ben ik bezig om een custom JSF component te schrijven. Dit component wordt een lookupField dat een <div> op de pagina toont, een AJAX request doet naar een LookupServlet en waaruit vervolgens een rij (id) gekozen kan worden. De AJAX request wordt pas gedaan wanneer de gebruiker op een knop drukt en dus niet bij het laden van de pagina! Het AJAX mechanisme werkt na behoren. De LookupServlet retourneert xml dan de hand van een opgegeven key. Deze actie geeft in zowel IE als FF geen stacktrace.

Mijn component LookupComponent extend de javax.faces.component.UIInput klasse. En ik delegeer de rendering van het component naar mijn eigen LookupRenderer

Het volgende probleem doet zich voor:
Op het moment dat ik een mijn jsp open in de browser (uiteraard via de FacesServlet) wordt mijn component volledig getoond in zowel Internet Explorer als FireFox. Echter krijg ik een stacktrace in IE en wordt de aanroep van mijn methodes beëindigd.

FF output
code:
1
2
3
4
5
6
LookupComponent: restoreState started
LookupRenderer: encodeInput started
LookupRenderer: encodeInput finished
LookupComponent: restoreState started
LookupRenderer: encodeInput started
LookupRenderer: encodeInput finished

IE output
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LookupComponent: restoreState started
LookupRenderer: encodeInput started
LookupRenderer: encodeInput finished
27-Apr-2006 11:33:31 javax.faces.webapp.UIComponentTag setupResponseWriter
SEVERE: Faces context not found. getResponseWriter will fail. Check if the FacesServlet has been initialized at all in your web.xml.
27-Apr-2006 11:33:31 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
    at javax.faces.webapp.UIComponentTag.setupResponseWriter(UIComponentTag.java:615)
    at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:217)
    at org.apache.myfaces.taglib.core.ViewTag.doStartTag(ViewTag.java:71)
    at org.apache.jsp.index_jsp._jspx_meth_f_view_0(index_jsp.java:153)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:121)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at ........
Het vreemde is dat het component gewoon werkt en in FF ik helemaal geen fouten krijg. Wanneer ik meerdere keren mijn componenten op de pagina plaats gaat het bij het laatte component fout.

Ik heb mijn probleem al zoveel mogelijk proberen in te kapselen door onder andere het javascript te verwijderen, en een flink aantal sysouts te doen.

Heeft iemand enig idee wat het probleem hier kan zijn? Of heeft iemand ooit zelf een component geklust en hetzelfde meegemaakt?

[ Voor 5% gewijzigd door dip op 27-04-2006 11:52 ]

It's scientifically known, that base improves the tase of cheezes!


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Je roept je pagina wel aan met een url eindigend op *.faces o.i.d.?

edit:

Ik zie trouwens al dat je dat doet. :) Zag het eerst even over het hoofd.

[ Voor 42% gewijzigd door JKVA op 27-04-2006 11:53 ]

Fat Pizza's pizza, they are big and they are cheezy


Verwijderd

misschien helpt dit je

http://www.it-eye.nl/webl...ting-a-jsf-div-component/

wel een berg code om alleen een div te maken.... guess that is JSF

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ik lees op dit forum: http://support.icesoft.com/jive/thread.jspa?messageID=2311
iets over een probleem met MyFaces.

Misschien kun je Sun's RI eens proberen.

Fat Pizza's pizza, they are big and they are cheezy


Verwijderd

JKVA schreef op donderdag 27 april 2006 @ 12:05:
Ik lees op dit forum: http://support.icesoft.com/jive/thread.jspa?messageID=2311
iets over een probleem met MyFaces.

Misschien kun je Sun's RI eens proberen.
Hoewel MyFaces niet 100% perfect is, is het wel de stabielere van de 2. Als je via een IDE werkt zou ik eens een break-point zetten in de facesservlet, dan kun je zien of ie hierdoor komt of niet bij de IE request. (bijvoorbeeld by Eclipse, ga via CTRL-T naar type "FacesServlet", en zet ergens in de service method een breakpoint; je moet hebt hier dan wel een source-attachment voor de myfaces jar voor nodig).

Ik vermoed dat de IE request niet eens bij de faces servlet aankomt; de melding die je krijgt is namelijk die je in 99.9% van de gevallen krijgt als je een JSP pagina met JSF tags oproept waarbij de request niet langs deze servlet is geweest.

Een andere (afhankelijk van je huidige setup snellere of langzamere methode) is om een filter voor de faces servlet te zetten en daar dan een breakpoint te zetten of een system.out te doen. Op die manier zie je tenminste wat er gebeurd.

Nog een andere method is om je log4j.properties te defineren en dan alles voor myfaces op finest te zetten. -> maak een bestand genaamd log4j.properties aan in je class root (Default namespace dus), en zet daar iets in als:

code:
1
2
3
4
5
log4j.category.javax.faces.webapp=FINEST
log4j.category.javax.faces.application=FINEST
log4j.category.org.apache.myfaces.config=FINEST
log4j.category.org.apache.myfaces.application=FINEST
log4j.category.org.apache.myfaces=FINEST


Je krijgt nu een sloot(!) aan informatie als je faces requesten doet, zodat je goed kunt zien waar het nog goed gaat en waar niet meer.
Verwijderd schreef op donderdag 27 april 2006 @ 11:59:
wel een berg code om alleen een div te maken.... guess that is JSF
Dit is eigenlijk een discussie die we hier niet moeten aangaan, maar deze opmerking is van 2 kanten eigenlijk niet volledig. Ten eerste gaat dit erover om een JSF taglib interface te maken voor een JSF component. Feitelijk staan JSF components compleet los van de taglib interface (hoewel de meeste mensen wel JSF components in JSPs gebruiken en dus die interface nodig hebben). Facelets is een andere view technology die JSP vervangt maar wel dezelfde JSF componenten gebruikt. De interface is hier veel simpelder (JSP is eigenlijk een legacy techniek die niet *super* geschikt is voor JSF).

Ten tweede is JSF niet bedoeld voor zo'n simpele DIV, die zet je gewoon direct op de pagina of gebruik je eventueel een JSP 2.0 .tag file voor. JSF componenten bouw je voor complexere dingen en dan valt de overhead redelijk snel in het niet bij de andere code.