在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) 个答案