2010-09-27 3 views
0

Je passe les premières étapes dans le framework JSF. Je fais donc ces jsp/haricot:JSF - Premiers pas - Le bean ne fonctionne pas

index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
    <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> 
    <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Home</title> 
    </head> 
    <body> 
     <f:view> 
      <h:form> 
       <h:outputText value="Inserisci il tuo nome" /> 
       <h:inputText value="#{utente.nome}" /> 
       <h:commandButton value="Cliccami" action="avanti" /> 
      </h:form> 
     </f:view> 
    </body> 
</html> 

pagina1.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Login Page</title> 
    </head> 
    <body> 
     <f:view> 
      <h:form id="LoginApplication"> 
       <h:panelGrid id="lpg" columns="2"> 
        <h:outputText value="Benvenuto nella tua prima pagina JSP " /> 
        <h:outputText value="#{utente.nome}" /> 
       </h:panelGrid> 
      </h:form> 
     </f:view> 
    </body> 
</html> 

user.java

package myPack; 

public class user{ 
    private String nome; 
    public user(){} 

    public String getNome(){ 
     return nome; 
    } 
    public void setNome(String nome) { 
     this.nome=nome; 
    } 
} 

faces.config.xml

<?xml version='1.0' encoding='UTF-8'?> 

<!DOCTYPE faces-config PUBLIC 
    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" 
    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> 

<!-- =========== FULL CONFIGURATION FILE ================================== --> 

<faces-config> 
    <navigation-rule> 
     <from-view-id>/index.jsp</from-view-id> 
     <navigation-case> 
      <from-outcome>avanti</from-outcome> 
      <to-view-id>/pagina1.jsp</to-view-id> 
     </navigation-case> 
    </navigation-rule> 

    <managed-bean> 
     <managed-bean-name>utente</managed-bean-name> 
     <managed-bean-class>myPack.user</managed-bean-class> 

     <managed-bean-scope>request</managed-bean-scope> 
    </managed-bean> 
</faces-config> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <context-param> 
     <param-name>javax.faces.CONFIG_FILES</param-name> 
     <param-value>/WEB-INF/faces-config.xml</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>/faces/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 

    <welcome-file-list> 
     <welcome-file>faces/index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

et j'ai ces problèmes: 1 - sur le texte d'entrée je vois le # {} utente.nome imprimé avant le clic sur le bouton (pourquoi? pour le moment je n'ai rien sur le haricot). 2 - quand je l'envoie au serveur, rien ne se passe et la chaîne "# {utente.nome}" est imprimée. Pourquoi?

+0

Quelle URL utilisez-vous pour ouvrir index.jsp? Aussi, pouvez-vous poster votre contenu web.xml? –

+0

Ajout du code web.xml. J'appelle le http: // localhost: 8084/JSFTutorial/faces/index.jsp (qui est le même de http: // localhost: 8084/JSFTutorial /) – markzzz

Répondre

1

Cela peut se produire lorsque le web.xml n'est pas correctement configuré comme au moins Servlet 2.4. Les expressions EL (celles #{} choses) ne seront pas évaluées alors. Puisque vous utilisez le JSF 1.1 vintage, je parie que vous utilisez aussi un servletcontainer vintage. Assurez-vous qu'il prend en charge Servlet 2.4 et veiller à ce que le web.xml est déclaré au moins:

<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 

Ou si vous utilisez un Servlet 2.5 contenant compatible, puis faire en sorte que web.xml est déclarée comme suit:

<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" 
    version="2.5"> 

(et envisager la mise à niveau JSF 1.2 ou, mieux, 2,0)

vous devez également vous assurer que vous n'avez pas des bibliothèques spécifiques servletcontainer comme servlet-api.jar, j2ee.jar, javaee.jar, jsp-api.jar, etc .. etc .. errant dans le dossier /WEB-INF/lib de webapp ou pire, dans le dossier JRE/lib/ext. Le dossier /WEB-INF/lib doit contenir uniquement les bibliothèques JSF (et toutes les autres bibliothèques spécifiques à la webapp elle-même). Le dossier JRE/lib/ext doit être conservé intact.

+0

uhm, im utilisant déjà le 2.4. Et je pense aussi à JSF 2.0 (ou au moins, j'ai téléchargé la dernière version de netbeans, qui a déjà la bibliothèque jsf, mais je ne sais pas). Donc peut-être pas un défaut xml je pense ... – markzzz

+0

La déclaration XML est sensible. Une petite chose et il retombe immédiatement au moins le mode de compatibilité possible. En ce qui concerne la version JSF, votre 'faces-config.xml' est déclaré comme JSF 1.1. Donc quelle que soit l'implémentation de JSF que vous utiliserez, cela reviendra au mode de compatibilité JSF 1.1. Que diriez-vous du classpath? Est-ce propre? Quoi qu'il en soit, je vous recommande fortement de vous procurer un livre/tutoriel décent. Tout ceci est dû à la lecture de livres/tutoriels obsolètes. Recherchez un ciblé JSF 2.0. Netbeans a quelques bons JSF 2.0. Commencez ici: http://netbeans.org/kb/docs/web/jsf20-intro.html – BalusC

+0

Ouais c'est mieux. Je vais le faire. Merci – markzzz