显示详细信息页面的最佳方式是什么

What's the best way to show a details page

上下文

在 Java 服务器页面 2.

中编写的遗留系统

问题

我有一个托管 bean,它向页面 (student-list.xhtml) 提供学生列表 (StudentListBean)。这个 bean 不提供对单个学生的访问,因为它的目标是生成一个学生列表并且它正在为此目的正确工作。每个学生都显示在一个数据表中,该表沿学生集合迭代。

有些同学有一定的条件,可能需要展示一些细节。在这些情况下,会提供 link 以便用户可以单击并查看这些详细信息。

link 在必须显示时已正确构建,但由于这些细节可能非常大,因此应在浏览器的另一个选项卡中显示,而不是在显示列表的同一个选项卡中显示。因此,新页面将显示来自 单个学生 .

的数据

因为StudentListBean不暴露单个学生,所以不能用来展示单个学生的数据。改变它的行为被认为是一个糟糕的选择,因为该 bean 打算管理一组学生,而不是单个学生。将创建一个新的 bean (StudentBean) 以提供对单个学生的所有详细信息的访问。

这里的问题是:如何将学生的 Id(列表中的当前那个)传递给 StudentBean,以便它可以从其 Id 加载学生因此它的数据可以显示在另一页中(student.xhtml)?

由于不需要与 StudentListBean 进行交互,link 是使用 <h:link/> 标记构建的,因为一些在线资源建议它是 <h:commandLink/> 更有效的选择。

提前致谢!

您可以将 <f:param> 添加到 <h:link> 组件,它将包含 Studentid。 (假设你的 dataTable 组件有一个 set var="student" 属性)

<h:link value="Your link text" outcome="the address you want to open" target="_new">
    <f:param name="studentId" value="#{student.id}" />
</h:link>

然后,为了在托管 bean 中检索传递的 id,您必须这样做:

String id = FacesContext.getExternalContext()
                        .getRequestParameterMap()
                        .get("studentId");