0

环境:JSF 2.0 / JPA(由 EclipseLink 提供) / Glassfish 3.1 / java-EE-5 /

  • 一个小型 JSF(没有 Spring、没有 EJB、没有 CDI)Web 应用程序主要包括显示实体的数据表,但目的是显示给定 Writer 的实体 iems 列表:

  • 数据表( <h:datatable/>) 显示 Writers 列表。

  • 数据表( <h:datatable/>) 显示作家撰写的书籍列表。(1--*)
  • 数据表( <h:datatable/>) 显示给予作家的评价列表。(1--*)
  • 数据表( <h:datatable/>) 显示 Writers 处理的主题列表。(1--*)。

这就是我看待事物的方式:

由于所有数据表都有一个带有 Writer ID(Writer 的主键)的列。当用户选择给定的写入器(最好从写入器数据表中)并使用它仅显示与该选定写入器行相关的记录时,如何实现告诉当前用户会话保存参数(写入器 ID)。

同理,当用户使用完选定的作家后,他/她可以重置会话以持有另一个作家 ID,并愉快地探索新选定的作家子项目。

换句话说,使用<h:datatables /><f:param />(或类似的东西),我怎样才能持续列出选定作者的书籍、评估和主题项目。

EG:对我来说,持久意味着=当用户从数据表中选择作者并导航到/book/List.xhtml页面时,书籍数据表必须仅列出所选作者拥有的书籍项目。如果用户导航到其他地方,他只能看到与同一作者相关的内容。

一种想法是使用 OpenFaces 数据表过滤器,但最终用户每次导航到页面时都过滤表太残忍了。他只需要做一次。(一个令人兴奋的解决方案是为每个数据表(在这种情况下)添加一个OpenFaces过滤器(:( ?<o:inputTextFilter /><o:datatable >

对不起,冗余。希望有人可以提供提示、想法、解决方案或更好的选择。问候。

4

1 回答 1

1

假设您确实在运行 Java EE 6 而不是 Java EE 5,您可以将当前选择的 writer 作为方法参数传递给数据表中 commandlink/button 中的 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>
于 2011-06-23T21:33:28.757 回答