2010-09-27 59 views
0

Im第一步進入JSF框架。我這樣做,這些JSP /豆:JSF - 第一步 - Bean無法工作

的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> 

,我有這些問題: 1 - 輸入文字,我看到#{} utente.nome點擊該按鈕之前(爲什麼印刷?此刻我沒有任何東西在豆上)。 2 - 當我將它發送到服務器時,什麼也沒有發生,並且字符串「#{utente.nome}」將被打印。爲什麼?

+0

你用什麼URL打開index.jsp?另外,你可以發佈你的web.xml內容嗎? – 2010-09-27 15:11:32

+0

添加了web.xml代碼。我調用了http:// localhost:8084/JSFTutorial/faces/index.jsp(與http:// localhost:8084/JSFTutorial /相同) – markzzz 2010-09-27 15:50:04

回答

1

web.xml沒有正確配置爲至少Servlet 2.4時,可能會發生這種情況。 EL表達式(那些#{}東西)將不會被評估。既然你使用的是老式的JSF 1.1,我敢打賭你也使用了老式的servlet容器。確保它支持Servlet 2.4和確保web.xml聲明至少爲:

<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"> 

或者,如果你使用一個Servlet 2.5兼容的容器中,然後確保web.xml聲明如下:

<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"> 

(並考慮升級JSF 1.2,或者更好,2.0)

你還需要確保你沒有任何servletcontainer特定的庫,例如servlet-api.jarj2ee.jarjavaee.jar,jsp-api.jar等..等..在webapp的/WEB-INF/lib文件夾或甚至更糟,在JRE/lib/ext文件夾中徘徊。 /WEB-INF/lib文件夾應該只包含JSF庫(以及特定於webapp本身的任何其他庫)。 JRE/lib/ext文件夾應保持不變。

+0

uhm,我已經使用2.4。我想也是JSF 2.0(或者至少,我下載了最新版本的netbeans,它已經有了jsf庫,但是我不知道)。所以可能不是我認爲的xml錯誤... – markzzz 2010-09-27 15:48:39

+0

XML聲明是敏感的。一件小事情,它立即回落到儘可能少的兼容性方式。至於JSF版本,你的'faces-config.xml'被聲明爲JSF 1.1。因此,無論您使用哪種JSF實現,它都會回退到JSF 1.1兼容性模式。類路徑怎麼樣?它乾淨嗎?無論如何,我強烈建議讓自己通過一本體面的書/教程。這一切只是由閱讀過時的書籍/教程造成的。尋找一個JSF 2.0目標。 Netbeans有一些不錯的JSF 2.0版本。從這裏開始:http://netbeans.org/kb/docs/web/jsf20-intro.html – BalusC 2010-09-27 15:58:01

+0

是的更好。我會的。謝謝 – markzzz 2010-09-27 16:22:05