Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 jsf2:h:link和getrowdata_Jsf 2_Jpa 2.0_Glassfish 3 - Fatal编程技术网

Jsf 2 jsf2:h:link和getrowdata

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> &

如果我在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 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捆绑在一起)

代码中有两个缺陷:

  • h:link
    发出GET请求,而不是POST请求。
    DataModel#getRowData()
    在这里也没有用处,因为您不能将bean操作附加到触发GET请求的组件

  • 带有
    公共字符串视图()
    没有任何意义。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/服务器。