2012-01-04 115 views
0

我想在JSF中創建簡單的圖書管理。我使用Glashfish服務器3.1Target Unreachable,'null'在JSF中返回null

書控制器:

@Named(value = "bookController") 
@SessionScoped 
public class BookController implements Serializable { 

     @EJB 
     BookFacadeLocal bookFacade; 
     Book book = new Book(); 
     private List<Book> booklist = new LinkedList<Book>(); 
    /** Creates a new instance of BookController */ 
    public BookController() { 


    } 

    public Book getBook() { 
     if (book == null) 
    book = new Book(); 
    return book; 
    } 

    public void setBook(Book book) { 
     this.book = book; 
    } 

    public List<Book> getBooklist() { 
     return booklist; 
    } 

    public void setBooklist(List<Book> booklist) { 
     this.booklist = booklist; 
    } 
    public String createNewBook() 
     { 
      setBook(new Book()); 
      return "createBook"; 
     } 
    public String saveNewBook() 
    { 
      bookFacade.create(book); 
      booklist=bookFacade.findAll(); 
      return "listBooks"; 
    } 
     public String createBookList() 
    { 
      booklist=bookFacade.findAll(); 
      return "listBooks"; 
    } 
} 

CreateBook查看:

<?xml version='1.0' encoding='UTF-8' ?> 
<!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:h="http://java.sun.com/jsf/html"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     Create Book 
      <h:form id="createBook"> 
       <h:panelGrid id="grid" columns="2" > 
        <h:outputLabel value="Title" for="title"></h:outputLabel> 
        <h:inputText id="title" value="#{bookController.book.title}"></h:inputText> 
        <h:outputLabel value="Price" for="price"></h:outputLabel> 
        <h:inputText id="price" value="#{bookController.book.price}"></h:inputText> 
        <h:outputLabel value="Description" for="description"></h:outputLabel> 
        <h:inputTextarea id="description" value="#{bookController.book.description}"></h:inputTextarea> 
        <h:outputLabel value="ISBN" for="isbn"></h:outputLabel> 
        <h:inputText id="isbn" value="#{bookController.book.isbn}"></h:inputText> 
        <h:outputLabel value="Pages" for="pages"></h:outputLabel> 
        <h:inputText id="pages" value="#{bookController.book.nbOfPage}"></h:inputText> 
        <h:outputLabel value="Illustration" for="illustrations"></h:outputLabel> 
        <h:selectBooleanCheckbox id="illustrations" value="#{bookController.book.illustrations}"> </h:selectBooleanCheckbox> 
        <h:panelGroup> </h:panelGroup> 
        <h:commandButton id="submit" value ="Save" action="#{bookController.saveNewBook}"> </h:commandButton> 
       </h:panelGrid> 
      </h:form> 
    </h:body> 
</html> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 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_3_0.xsd"> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</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.xhtml</welcome-file> 
    </welcome-file-list> 
</web-app> 

BookController的:#{} BookController的

- - > BookController: [email protected]

錯誤:

/createBook.xhtml @13,82 value="#{bookController.book.title}": Target Unreachable, 'null' returned null

回答

4

/createBook.xhtml @13,82 value="#{bookController.book.title}": Target Unreachable, 'null' returned null

#{bookController}不可用在任何地方的範圍。這通常是@Named註釋的責任。此註釋將僅在webapp的啓動時在存在/WEB-INF/beans.xml文件時進行掃描。所以請確保該文件存在(可保留爲空)。

或者,您也可以只使用標準JSF註釋:

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class BookController { 

    // ... 

} 

(請注意,我沒有使用javax.faces.bean.SessionScoped,因爲這是一個正常的控制器錯誤的範圍;如果使用它,同bean實例將在同一會話中的多個瀏覽器標籤頁/窗口之間共享,這隻會導致不直觀的web應用行爲)

+0

hy! /WEB-INF/beans.xml中存在一些XML聲明...我改變了我的控制器中的註釋,但同樣的錯誤發生。 – test123123 2012-01-04 14:40:19

+0

你在'beans.xml'中聲明瞭什麼?這聽起來像是你已經複製了可以完全覆蓋註解的bean註冊。 – BalusC 2012-01-04 14:43:35

+0

<?xml version =「1.0」encoding =「UTF-8」?> test123123 2012-01-04 14:45:11

相關問題