【发布时间】:2011-07-31 21:33:15
【问题描述】:
如果我在 books.xhtml 中有一个 h:dataTable 提供记录列表,并且我想查看特定记录,然后添加或编辑该记录,目前我有这个:
<h:dataTable #{BookBean.books}" var="books">
<h:link outcome="bookview" value="#{books[1]}">
<f:param name="id" value="#{books[2]}" />
</h:link>
</h:dataTable>
我发现我需要包含<f:param>才能显示点击链接的CSS状态;否则如果我没有<f:param>,每次我点击上面代码中h:link标签呈现的链接时,所有的链接都会变成CSS点击状态。
另外,我在某处读到过有关getrowdata() 的信息,但我无法让它工作。这是比使用<f:param> 更好的选择吗?
我已经在我的 BookBean 类中尝试了getrowdata() 方法,如下所示:
private DataModel<BookModel> books;
private BookModel currentBook;
public String view()
{
currentBook = books.getRowData();
return "bookview";
}
在 bookview.xhtml 我有这个:
<h:dataTable value="#{BookBean.view}" var="item">
... // render content here
<h:dataTable>
但我收到有关未找到该属性的错误。很抱歉问这个问题,但我仍然不了解 JSF 2 的一些强大功能。了解h:link 和getrowdata 用法的专家能否用通俗的语言或一些基本代码向我解释例子。谢谢。
更新: 根据下面的@BalusC 建议更改了课程。 BookModel 类是:
@Entity
public class BookModel implements Serializable
{
private Long id;
private String title;
private String author;
// getters and setters here
}
BookService 类如下所示:
@Stateless
public class BookService
{
@PersistenceContext(unitName = "persistentUnit")
protected EntityManager entityManager;
public BookModel create() {
return new BookModel();
}
public void delete(BookModel bookModel) {
bookModel = entityManager.merge(bookModel);
entityManager.remove(bookModel);
}
public BookModel update(BookModel bookModel) {
return entityManager.merge(bookModel);
}
public BookModel find(Long id) {
return entityManager.find(BookModel.class, id);
}
}
BookBean 类是:
@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() {
currentBook = bookService.find(id);
}
public BookModel getCurrentBook() {
return currentBook;
}
public void setCurrentBook(BookModel currentBook) {
this.currentBook = currentBook;
}
}
运行上面的 BookBean 类导致了这个错误:java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [org.apache.openjpa.util.LongId], because it has not yet been started, or was already stopped。这就是我目前卡住的地方。
仅供参考:我的开发环境是 Glassfish 3.1、Apache OpenJPA 2.1 和 JSF 2.1.0(与 Glassfish 捆绑在一起)
【问题讨论】:
-
我完全不知道您所说的“CSS 状态”是什么意思,以及这到底是个什么问题。 CSS 只是一种样式语言,它不应该以任何方式影响任何 JSF 功能。能详细点吗?
-
@BalusC:我上面提到的 CSS 状态 与 a:visited 有关。我希望这能消除任何误解。 :-)
标签: jsf-2 jpa-2.0 glassfish-3