环境:JSF2.0/ JPA (由EclipseLink提供)/ Glassfish 3.1 / java-EE-5 /
<h:datatable/>)显示作家列表。<h:datatable/>)显示由作家编写的书籍列表。(1-*)<h:datatable/>)显示给作家的评估列表。(1-*)<h:datatable/>)显示作者处理的主题列表。(1-*)..
,这就是我对事物的看法:
因为所有数据都有一个带有Writer的列(Writer的主键)。当用户选择给定的写入器(最好是从writer datatable)并使用它仅显示与所选写入器行相关的记录时,如何实现通知当前用户会话保持参数(Writer ID)。
同样,当用户使用选定的写入器完成操作时,他/她可以重置会话以保存另一个写入器ID,并愉快地使用新选择的写入器子项进行探索。
换句话说,使用<h:datatables />和<f:param /> (或类似的内容),我如何持久地列出所选作者的图书、评估和主题项目。
对于我来说,坚持意味着=当用户从datatable中选择一个作者,并导航到/book/List.xhtml页面时,book datatable必须只列出所选作者拥有的图书条目。如果用户导航到其他地方,他只能看到与同一作者相关的内容。
一个想法是使用OpenFaces datatable过滤器,但对于最终用户来说,每次导航到页面时过滤表都太残忍了。他只需要做一次。(一个令人兴奋的解决方案是为每个datatable添加一个OpenFaces filter (<o:inputTextFilter />) (在这种情况下是<o:datatable >),然后所有表的所有过滤器都自动获得用户会话在JSF循环期间作为参数持有的写入者ID。但这真的可行吗?
很抱歉裁员了。希望有人能在暗示、想法、解决方案或更好的替代方案方面提供帮助。打招呼。
发布于 2011-06-23 21:33:28
假设您确实在运行Java 6而不是Java 5,您只需将当前选定的编写器作为方法参数传递给datatable中的命令链接/按钮中的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>https://stackoverflow.com/questions/6364839
复制相似问题