目标无法访问,’null’在JSF中返回null

我想在JSF中创建一个简单的图书管理。 我正在使用Glashfish Server 3.1

书籍控制器:

@Named(value = "bookController") @SessionScoped public class BookController implements Serializable { @EJB BookFacadeLocal bookFacade; Book book = new Book(); private List booklist = new LinkedList (); /** 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 getBooklist() { return booklist; } public void setBooklist(List 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视图:

     Facelet Title   Create Book                        

web.xml中:

    javax.faces.PROJECT_STAGE Development   Faces Servlet javax.faces.webapp.FacesServlet 1   Faces Servlet /faces/*    30    faces/index.xhtml   

BookController:#{bookController}

– > BookController:at.em.controller.BookController@107dd383

错误:

/createBook.xhtml @ 13,82 value =“#{bookController.book.title}”:目标无法访问,’null’返回null

/createBook.xhtml @ 13,82 value =“#{bookController.book.title}”:目标无法访问,’null’返回null

#{bookController}在范围内的任何位置都不可用。 这通常是@Named注释的责任。 只有存在/WEB-INF/beans.xml文件时,才会在webapp的启动时扫描此注释。 因此请确保该文件存在(可以保留为空)。

或者,您也可以使用标准的JSF注释:

 import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; @ManagedBean @ViewScoped public class BookController { // ... } 

(请注意,我没有使用javax.faces.bean.SessionScoped因为这是普通控制器的错误范围;如果使用它,同一个bean实例将在同一会话中的多个浏览器选项卡/窗口之间共享导致不直观的webapp行为)