2
我有這樣的服務豆:@ManagedProperty註釋類型返回null
@Stateless
public class BookService
{
@PersistenceContext(unitName="persistentUnit")
protected EntityManager entityManager;
public BookModel find(Long id) {
return entityManager.find(BookModel.class, id);
}
}
而且支持Bean的facelet頁:
@ManagedBean(name = "bookBean")
@RequestScoped
public class BookBean implements Serializable
{
@EJB
private BookService bookService;
@ManagedProperty(value="#{param.id}")
private Long id;
private DataModel<BookModel> books;
private BookModel currentBook;
@PostConstruct
public void init() {
if (id == null) {
// UPDATE: Retrieve a list of books.
} else {
// UPDATE: id shouldn't be null here.
// Get detail info about a book using the id
currentBook = bookService.find(id);
}
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public BookModel getCurrentBook() {
return currentBook;
}
public void setCurrentBook(BookModel currentBook) {
this.currentBook = currentBook;
}
}
爲什麼是id
值總是返回null即使URL返回爲bookedit.jsf?id=5418
我不明白這一點。
另外,我發現EntityManager#find
方法的限制性很強,因爲它只接受主鍵值作爲第二個參數。如果我想傳遞[哈希]值而不是主鍵,該怎麼辦?我如何用EntityManager#find
方法做到這一點?
P.S.我注意到OpenJPA和EclipseLink實現的EntityManager#find
要求是相同的。嗯...
您正在嘗試在@PostConstruct中使用注入值。我不知道第一個會發生什麼 - @ManagedProperty注入或@PostConstruct。你檢查過了嗎? – Osw 2011-04-11 20:06:34
@Osw:@ @ PostConstruct在所有依賴注入之後運行,所以這部分是好的。 – BalusC 2011-04-11 22:05:28
@BalusC:根據DI和'@ PostContruct'文檔,您是正確的。儘管如此,我不確定爲什麼我要'null'而不是'5148'。這很奇怪! – ChuongPham 2011-04-12 04:13:10