Jsf 2 jsf2:h:link和getrowdata
如果我在books.xhtml中有一个Jsf 2 jsf2:h:link和getrowdata,jsf-2,jpa-2.0,glassfish-3,Jsf 2,Jpa 2.0,Glassfish 3,如果我在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
提供记录列表,并且我想查看一个特定的记录,然后添加或编辑该记录,目前我有:
<h:dataTable #{BookBean.books}" var="books">
<h:link outcome="bookview" value="#{books[1]}">
<f:param name="id" value="#{books[2]}" />
</h:link>
</h:dataTable>
<h:dataTable value="#{BookBean.view}" var="item">
... // render content here
<h:dataTable>
在bookview.xhtml中,我有:
<h:dataTable #{BookBean.books}" var="books">
<h:link outcome="bookview" value="#{books[1]}">
<f:param name="id" value="#{books[2]}" />
</h:link>
</h:dataTable>
<h:dataTable value="#{BookBean.view}" var="item">
... // render content here
<h:dataTable>
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类是:
@Entity
public class BookModel implements Serializable
{
private Long id;
private String title;
private String author;
// getters and setters here
}
@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;
}
}
@ManagedBean(name=“bookBean”)
@请求范围
公共类BookBean实现了可序列化
{
@EJB
私人图书服务;
@ManagedProperty(value=“#{param.id}”)
私人长id;
私人数据模型书;
私家书;
@施工后
公共void init(){
currentBook=bookService.find(id);
}
PublicBookModel getCurrentBook(){
返回当前账簿;
}
公共无效setCurrentBook(BookModel currentBook){
this.currentBook=currentBook;
}
}
运行上面的BookBean类导致此错误:java.lang.IllegalStateException:WEB9031:WebappClassLoader无法加载资源[org.apache.openjpa.util.LongId],因为它尚未启动或已停止
。这就是我目前所处的困境
仅供参考:我的开发环境是Glassfish 3.1、Apache OpenJPA 2.1和JSF 2.1.0(与Glassfish捆绑在一起)代码中有两个缺陷:
发出GET请求,而不是POST请求。h:link
在这里也没有用处,因为您不能将bean操作附加到触发GET请求的组件DataModel#getRowData()
- 带有
的公共字符串视图()
没有任何意义。datatable的值必须是项的集合,而不是bean操作方法
我知道您希望在表中的每个图书项目上都有一个GET链接,该链接指向关于该图书项目的某些详细页面。修复详细信息页面,如下所示:
@ManagedBean
@RequestScoped
public BookBean {
@ManagedProperty(value="#{param.id}")
private Long id;
private BookModel currentBook;
@PostConstruct
public void init() {
currentBook = bookDAO.find(id);
}
// ...
}
bookview.xhtml
<h:outputText value="#{bookBean.currentBook.id}" />
<h:outputText value="#{bookBean.currentBook.author}" />
<h:outputText value="#{bookBean.currentBook.title}" />
...
@ManagedProperty
将设置GET请求参数。@PostConstruct
将根据参数预加载正确的书籍
请注意,这与POST Redirect GET模式无关。我完全不知道“CSS状态”是什么意思,也不知道这到底是个什么问题。CSS只是一种样式语言,它不应该以任何方式影响任何JSF功能。你能详细说明一下吗?@BalusC:我上面提到的CSS状态与a:visited有关。我希望这能消除任何误解。:-)回答得好!虽然问题很不清楚@user463053-查看BaluC的帖子,了解CRUD的优秀示例。特别是为了正确使用getRowData()@BaluC-顺便说一句,CSS状态我想他指的是锚定标签将a:visited样式应用于他的所有链接。@BaluC:是的,你知道我想要实现什么。我尝试了上面建议的更改,但遇到了以下错误:
java.lang.IllegalStateException:WEB9031:WebappClassLoader无法加载资源[org.apache.openjpa.util.LongId],因为它尚未启动或已停止
。对不起,我应该在我的原始帖子中提到我使用OpenJPA。我已经用更多信息更新了我的原始帖子,向您展示了我正在尝试做的事情。@Nikhil:谢谢您的链接。@BalusC:我已经删除了帖子重定向get标记,并用其他标记更新了帖子,我希望这些标记与我手头的问题更密切相关。根据您的编辑,清理/重建/重新部署/重新启动您的webapp/服务器。