有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在MVC Web App Java EE中使用无类实例化的对象方法

我有一个web应用程序,它允许我使用JSF、EJB、MVC、JPA将Book对象添加到显示为“datatable”的列表中

视图代码“listBooks.xhtml”:

            <h:dataTable value="#{bookController.booklist}" var="elementBook" border="1" cellpadding="5">
                <h:column>
                <f:facet name="isbn"> 
                <h:outputText value="ISBN"/> </f:facet>                    
                <h:outputText value="#{elementBook.isbn}"/>
                </h:column>

                <h:column>
                <f:facet name="header">
                <h:outputText value="Title"/></f:facet>
                <h:outputText value="#{elementBook.title}"/>
                </h:column>  
                /* rest of the code */
            </h:dataTable>

视图代码“addNewBook.xhtml”:

<h:form> 
           <h4>
              ISBN:
              <h:inputText value="#{bookController.book.isbn}" size = "10" /> <br />
              Title:
             <h:inputText value="#{bookController.book.title}" size = "10" /> <br />  
              Price:
              <h:inputText value="#{bookController.book.price}" size = "10" /> <br />  
              Description:
              <h:inputTextarea value="#{bookController.book.description}" /> <br />
              Number of pages:
              <h:inputText value="#{bookController.book.bnOfPage}" size = "10" /> <br />  
              Illustrations:
              <h:selectBooleanCheckbox  value="#{bookController.book.illustrations}"/> <br />
              <h:commandButton value="Create a book" action="#{bookController.doCreateBook()}" />
             </h4>
             <hr/>
             <h2> Librairie en ligne</h2>

       </h:form>

控制器层:

@ManagedBean
@RequestScoped
public class BookController {

    @EJB
    private BookEJB bookEJB;
    private Book book;
    private List<Book> booklist;

    public BookController() {
        book = new Book();
        booklist=new ArrayList();
    }

    public Book getBook() {
        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 doCreateBook() {
        bookEJB.create(book);
        booklist= bookEJB.findAll();
        return "listBooks.xhtml";

    }
}

业务逻辑层:

@Stateless
public class BookEJB extends AbstractFacade<Book> {
    @PersistenceContext(unitName = "tpbookPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public BookEJB() {
        super(Book.class);
    }

    }

还有一个抽象的正面:

public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }
//......

最后是实体“书”:

@Entity
public class Book implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String title;
    private Float price;
    private String description;
    private String isbn;
    private Integer bnOfPage;
    private Boolean illustrations;

    public Book(){
    }

    public Integer getBnOfPage() {
        return bnOfPage;
    }

    public String getDescription() {
        return description;
    }

    public Boolean getIllustrations() {
        return illustrations;
    }

    public String getIsbn() {
        return isbn;
    }

    public Float getPrice() {
        return price;
    }

控制器类“BookController”,其任务是使用视图更新模型,它声明一个book变量private Book book;,对于EJB也是如此,private BookEJB bookEJB;,然后使用这个bookEJB.create(book);

它不应该像BookEJB bookEJB = new BookEJB();然后在doCreateBook()方法中执行bookEJB.create(book);那样。我们不应该总是使用new这个词来使用对象并访问它们的方法吗?因为如果我们只使用类的名称,我们将只访问静态方法

那么为什么要在BookController构造函数中使用new关键字呢Book book = new Book();


共 (0) 个答案