当我想看到我的书的详细页面时,我会得到我的书并将其重定向到我的概述页面。现在当我使用<h:link>
时,他总是给出我的dataTable的最后一项。当我使用<h:commandLink>
everthing工作正常。现在我的问题是,为什么{&#39;同一&#39; <h:link outcome="...">
中的代码可以使用吗?
Managed Bean
<h:commandLink>
Book.xhtml
@Named(value = "bookController")
@SessionScoped
public class BookController implements Serializable {
@EJB private BookRepository dao;
private LibraryBook book = new LibraryBook();
...
public String getLibraryBook(String isbn)
{
this.book = this.dao.getBook(isbn);
return "bookOverview";
}
...
}
答案 0 :(得分:3)
因为在呈现页面时评估<h:link outcome>
,而不是在您单击链接时评估outcome
。您在bookOverview
中引用的方法将会话范围bean属性设置为当前项,然后返回字符串outcome="bookOverview"
。因此,在您点击之前,有效地结束了每个具有<h:commandLink action>
的链接。与此同时,bean只记住了最后一项。
<h:link>
有效,因为点击链接后会对其进行评估。
这种差异是因为<h:form>
用于幂等(GET)请求,不需要有状态<h:commandLink>
,<h:form>
用于非幂等(POST)请求需要有状态的<h:link>
。
那就是说,你要解决的真正问题在这里得到解答:Creating master-detail pages for entities, how to link them and which bean scope to choose。它显示了如何正确使用$pat = array('/m/', '/d/', '/Y/');
$repl = array('\\d{2}', '\\d{2}', '\\d{4}');
$pattern = preg_replace($pat, $repl, $pattern);
以及您应该实际使用的bean范围。