2011-11-28 3 views
0

JSF에서 값을 가져 와서 bean으로 가져 오거나 그 반대로 가져 오는 JSF로 웹 응용 프로그램을 작성합니다. 내가 제대로 모든 것을 다했다 생각하지만 서버를 시작하고 2.0 프레임 워크페이지의 JSF 오류 - bean에 값을 가져 오거나 설정할 수 없습니다.

내가 JDK 1.6와 이클립스 헬리오스를 사용하고

SEVERE: Servlet.service() for servlet [jsp] in context with path [/SimpleJSF] threw exception [/greeting.jsp (line: 20, column: 85) #{...} is not allowed in template text] with root cause 
org.apache.jasper.JasperException: /greeting.jsp (line: 20, column: 85) #{...} is not allowed in template text 

다음과 같은 오류를 얻을 첫 페이지, 아파치 톰캣 7 JSF에 액세스하려고 할 때

여기

greeting.jsp 내 코드입니다

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html 
xmlns="http://www.w3.org/1999/xhtml" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html"> 
<h:head> 
     <title>Guess Number Facelets Application</title> 
    </h:head> 
    <h:body> 
     <h:form> 

      <h2> 
       Hi, my name is Duke. I am thinking of a number from 
       0 to 10. 
       Can you guess it? 
      </h2> 
      <p><h:inputText id="userNo" title="Type a number from 0 to 10:" value="#{resultNumber.userNumber}"> 
        <f:validateLongRange minimum="#{resultNumber.minimum}" maximum="#{resultNumber.maximum}"/> 
       </h:inputText> 

       <h:commandButton id="submit" value="Submit" action="response.jsp"/> 
      </p> 
      <h:message showSummary="true" showDetail="false" style="color: #d20005; font-family: 'New Century Schoolbook', serif; font-style: oblique; text-decoration: overline" 
         id="errors1" 
         for="userNo"/> 

     </h:form> 
    </h:body> 
</html> 

,

response.jsp

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Insert title here</title> 
<h:head> 
     <title>Guess Number Facelets Application</title> 
    </h:head> 
    <h:body> 
     <h:form> 

      <h2> 
       <h:outputText id="result" value="#{resultNumber.response}"/> 
      </h2> 
      <h:commandButton id="back" value="Back" action="greeting.xhtml"/> 
     </h:form> 
    </h:body> 

</html> 

자바 빈, ResultNumber.java 구성 파일에 대한 지금

package guessNumber; 

import java.util.Random; 

import javax.ejb.LocalBean; 
import javax.ejb.Stateless; 

/** 
* Session Bean implementation class ResultNumber 
*/ 
@Stateless(mappedName = "resultNumber") 
@LocalBean 
public class ResultNumber { 

    Integer randomInt = null; 
     Integer userNumber = null; 
     String response = null; 
     private long maximum=10; 
     private long minimum=0; 

     public ResultNumber() { 
      Random randomGR = new Random(); 
      randomInt = new Integer(randomGR.nextInt(10)); 
      System.out.println("Duke's number: " + randomInt); 
     } 

     public void setUserNumber(Integer user_number) { 
      userNumber = user_number; 
     } 

     public Integer getUserNumber() { 
      return userNumber; 
     } 

     public String getResponse() { 
      if ((userNumber != null) && (userNumber.compareTo(randomInt) == 0)) { 
       return "Yay! You got it!"; 
      } else { 
       return "Sorry, " + userNumber + " is incorrect."; 
      } 
     } 

     public long getMaximum() { 
      return (this.maximum); 
     } 

     public void setMaximum(long maximum) { 
      this.maximum = maximum; 
     } 

     public long getMinimum() { 
      return (this.minimum); 
     } 

     public void setMinimum(long minimum) { 
      this.minimum = minimum; 
     } 


} 

web.xml을

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>SimpleJSF</display-name> 
    <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> 
    <context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
    </context-param> 
    <context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
    </context-param> 
    <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> 
    <welcome-file-list> 
    <welcome-file>faces/greeting.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

당신이 태그 라이브러리가 바로 여는 HTML 태그를이 두 줄을 manually.Add 가져와야합니다, 그래서 당신은, 파일을 .jsp를 사용하는

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

<faces-config 
    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-facesconfig_2_0.xsd" 
    version="2.0"> 
    <managed-bean> 
     <managed-bean-name>resultNumber</managed-bean-name> 
     <managed-bean-class>guessNumber.ResultNumber</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope> 
    </managed-bean> 
</faces-config> 

답변

0

면-config.xml에.

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 
1

JSF 2.0에서 JSP는 뷰 기술로 사용되지 않으며 Facelets에서 성공했습니다. .jsp 개의 파일 이름을 .xhtml 개의 파일로 바꿔야합니다. 귀하의 경우 두 JSP 모두에서 전체 <%@ page %> 행을 제거해야합니다. 그런 다음 URL의 .xhtml 확장명을 사용하여 호출해야합니다.

또한 ConfigureListenerweb.xml에서 제거해야하며 JSP 환영 파일의 이름을 XHTML로 바꿔야합니다. 또한 /faces/* 대신 *.xhtmlFacesServlet URL 패턴으로 사용하는 것이 좋습니다. 이렇게하면 URL에 항상 /faces/*을 넣을 필요가 없습니다. 마지막으로 당신은 faces-config.xml에서 콩을 제거하고 대신 그 javax.ejb 주석의 다음과 같이 콩에 주석을해야합니다 결국

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 

@ManagedBean 
@RequestScoped 
public class ResultNumber { 

, 당신이 JSF 1.x에서 자습서를 읽고 JSF 2과를 혼합 한 것으로 보인다. 엑스. JSF 버전의 JSF 책/튜토리얼이 당신이 목표로 삼고있는 JSF 버전에 대해 매우주의해야합니다. JSF 2.0 이후로 많은 일들이 다르게 수행됩니다.

관련 문제