Domanda

Ok, mi sono imbattuto nel mio primo StackOverflowError da quando mi sono iscritto a questo sito, ho pensato che questo fosse un post imperdibile :-).Il mio ambiente è Seam 2.0.1.GA, JBoss 4.2.2.GA e sto usando JSF.Sto effettuando la conversione dalla visualizzazione facelet a JSP per sfruttare alcuni tag JSP esistenti utilizzati sul nostro sito esistente.Ho modificato i file di configurazione faces-config.xml e web.xml e ho iniziato a ricevere il seguente errore durante il tentativo di eseguire il rendering di una pagina jsp.Qualcuno ha qualche idea?

2008-09-17 09: 45: 17.537 Debug [org.jboss.seam.contexts.faceslifecycle] Iniziano richiesta JSF per /form_home.jsp 2008-09-17 09: 45: 17.587 Errore [org.apache.catalina.core. Contenitore. Applicationhttpprequest.java:210) su org.apache.catalina.core.applicationhttpRequest.getAttribute (ApplicationhttpRequest.java:222) su org.apache.catalina.core.applicationhttprequest.getatTribute (ApplicationTTTTTi:222 a ORG. .Core.ApplicationHttPrequest.getAttribute (Applicationhttprequest.java:222) ...

Il mio file faces-config.xml ora è vuoto senza FaceletsViewHandler:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
   http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

</faces-config>

E il mio file Web.xml:

<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <!-- Ajax4jsf -->
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <param-value>blueSky</param-value>
 </context-param>
  <!-- Seam -->
 <listener>
  <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
 </listener>


 <filter>
  <filter-name>Seam Filter</filter-name>
  <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
 </filter>

 <filter-mapping>
  <filter-name>Seam Filter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>

 <servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
     <servlet-class>org.jboss.seam.servlet.SeamResourceServlet
     </servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>Seam Resource Servlet</servlet-name>
   <url-pattern>/seam/resource/*</url-pattern>
 </servlet-mapping>
 <!-- Seam end --> 

 <!-- JSF -->
 <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.jsp</param-value>
 </context-param>

 <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsp</url-pattern> 
 </servlet-mapping>
È stato utile?

Soluzione

Sono riuscito a capire questo problema.Apparentemente non è possibile configurare web.xml per avere lo stesso valore param di .jsp per Javax.faces.DEFAULT_SUFFIX del modello URL Faces Servlet (*.jsp).Se cambi il modello URL in .jspx o in /qualunquenomedirvuoi/ l'applicazione si avvia senza errori di overflow dello stack.(Nota:la chiave è che il modello URL DEFAULT_SUFFIX e Faces Servlet non possono essere gli stessi indipendentemente da cosa siano.) Spero che questo aiuti chiunque altro abbia riscontrato questo problema specifico.

Altri suggerimenti

Gli overflow dello stack in Java sono quasi sempre causati da infinite chiamate di ricorsione/metodo.Nel tuo caso, data l'analisi dello stack, sembra che 'getAttribute()' venga chiamato ripetutamente fino all'arresto anomalo.Anche se non ho molta familiarità con gli ambienti particolari che stai utilizzando, suggerirei di controllare il tuo codice .jsp per qualsiasi di questo tipo di comportamento (ad esempio due metodi che si chiamano a vicenda)

Quindi, ho avuto un errore simile.Per quanto mi riguarda, è stato il fatto che avevo un progetto JSF e stavo scherzando con le estensioni dei file.Per cominciare, avevo tutti i miei file web con estensione .jsp.Funzionava, ma poi volevo che fossero tutti .jsf, quindi ho iniziato a utilizzare .xhtml.Nel processo, il mio file web.xml è stato modificato per contenere xhtml e jsf.La modifica del file web.xml è andata bene.Ciò che mi ha causato StackOverflowError è stato il fatto che avevo index.xhtml con un tag ui.include che puntava a header.jsf.Quindi avevo un file xhtml che puntava a un file jsf.Avevo pensato che web.xml sarebbe stato in grado di gestirlo, ma non è stato così, ho ricevuto StackOverflowError.Quindi, per risolvere questo problema, ora tutti i miei file JSF hanno estensione .xhtml e i tag ui:include nidificati puntano ai file .xhtml.

D'altro canto, l'URL del browser può gestire perfettamente i file index.jsp, index.jsf e index.xhtml.Quindi web.xml (con mappature servlet per jsp, jsf e xhtml) gestisce bene l'URL del browser, ma non per quello che il mio problema sopra evidenziato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top