环境: JSF 2.0 / JPA(由EclipseLink提供)/ Glassfish 3.1 / java-EE-5 /
一个小的JSF(No Spring,没有EJB,没有CDI)Web应用程序主要包括显示实体的数据表,但目的是显示给定Writer的实体iems列表: / EM>
数据表(<h:datatable/>
)显示作家列表。
<h:datatable/>
)显示由作家编写的书籍列表。 (1 - *)<h:datatable/>
)显示给予作者的评估列表。 (1 - *)<h:datatable/>
)显示由作者处理的主题列表。 (1 - *)。这就是我看到的东西:
由于所有数据表都有一个带有Writer ID(Writer主键)的列。 当用户选择给定的编写器(最好来自Writer数据表)并使用它来仅显示与所选编写器行相关的记录时,如何告诉当前用户会话保存参数(Writer ID)。
同样地,当用户完成所选的作者时,他/她可以重置会话以保存另一个作者ID并愉快地探索新选择的作家子项目。
换句话说,使用<h:datatables />
和<f:param />
(或类似的东西),如何持久地列出所选作者的书籍,评估和主题项目。
E.G:对我持久意味着=当用户从数据表中选择一个编写器并导航到/book/List.xhtml
页面时,书籍数据表必须仅列出所选编写者具有的书籍项目。如果用户导航到其他地方,他只能看到与同一作者有关的内容。
一个想法是使用OpenFaces数据表过滤器,但是每次他/她导航到页面时,最终用户过于残忍地过滤表格太残忍了。他只需要做一次。
(一个令人兴奋的解决方案是为每个数据表(在这种情况下为<o:inputTextFilter />
)添加 OpenFaces 过滤器(<o:datatable >
),然后所有表的所有过滤器自动获取writer ID在JSF循环期间由用户会话保持为参数。但这是否真的可行:(?
对不起冗余。希望有人可以帮助提示,想法,解决方案或更好的选择。 问候。
答案 0 :(得分:1)
假设您确实在运行Java EE 6而不是Java EE 5,您可以将当前选定的writer作为方法参数传递给数据表中commandlink /按钮中的bean,并让其他表依赖于此。
给出以下Writer
实体:
public class Writer {
private String name;
private List<Book> books;
private List<Evaluation> evaluations;
private List<Topic> topics;
// ...
}
以及以下托管bean:
@ManagedBean
@ViewScoped // request or session are also okay.
public class Bean {
private List<Writer> writers; // +getter
private Writer writer; // +getter +setter
// ...
}
然后您可以按如下方式设置数据表(在单个视图中):
<h:form>
<h:dataTable value="#{bean.writers}" var="writer">
<h:column>#{writer.name}</h:column>
<h:column>
<h:commandButton value="View" action="#{bean.setWriter(writer)}">
<f:ajax render=":details" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
<h:panelGroup id="details">
<ui:fragment rendered="#{not empty bean.writer}">
<h:dataTable value="#{bean.writer.books}" var="book">
<h:column>#{book.name}</h:column>
...
</h:dataTable>
<h:dataTable value="#{bean.writer.evaluations}" var="evaluation">
<h:column>#{evaluation.name}</h:column>
...
</h:dataTable>
<h:dataTable value="#{bean.writer.topics}" var="topic">
<h:column>#{topic.name}</h:column>
...
</h:dataTable>
</ui:fragment>
</h:panelGroup>