我正在使用带有jsf 2.2的Glassfish 4,我在其中一个jsf页面中有以下代码:
<ui:composition template="resources/admin_layout.xhtml">
<f:metadata>
<f:viewParam name="bookId" value="#{bookController.bookId}"/>
<f:viewAction action="#{bookController.findById}"/>
</f:metadata>
...
</ui:composition>
问题是永远不会调用findById
方法(我在那里添加了一个日志语句,没有打印任何内容,私有成员保持为空)。
通过以下方式从其他页面调用此页面:
<h:form>
<h:button value="update" outcome="update_book.xhtml">
<f:param name="bookId" value="#{book.id}"/>
</h:button>
</h:form>
以下是BookController的简化代码:
@Model
public class BookController {
@EJB
private BookEjb be;
@Inject
private Logger logger;
private Book book;
private Long bookId;
public Long getBookId() {
return bookId;
}
public void setBookId(final Long id) {
bookId = id;
}
public void findById() {
book = be.findById(bookId);
logger.log(Level.INFO, "Found book with title: {0}", book.getTitle());
}
}