JSF传递一个列表以显示在另一个页面中

时间:2013-03-11 19:24:09

标签: java jsf primefaces managed-bean

嗨,我是JSF的新手,我有点迷茫。这就是我想要做的。 我有一个页面,其中显示一个节目列表,其中每个节目都有一个表示列表。我希望用户通过单击特定节目来转到仅显示节目的链接表示的页面。这是我当前的.xhtml页面和我的两个托管bean。他们现在所做的是显示所有节目和所有列表。

@Entity
@Table(name = "SHOW_SPECTACLE")
public class Spectacle implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @ElementCollection
    @CollectionTable(name = "T_TYPES_SPECTACLE")
    @Column(name = "TYPES_SPECTACLE")
    private List<String> typesSpectacle;

    @Column(name = "NOM_SPECTACLE")
    private String nomSpectacle;

    @Column(name = "DESCRIPTION")
    private String description;
    @Column(name = "LIEN_VIDEO")
    private String lienVideo; // type Blop
    @Column(name = "LIEN_IMAGE")
    private String lienImage;

    @OneToOne
    private Artiste artiste;
    @OneToMany(mappedBy = "spectacle")
    private List<Representation> representations;

}

public class Representation implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;
    @Column(name = "NB_BILLETS_DISPO")
    private Integer nbBilletsDispo;
    @Column(name = "PRIX")
    private Float prix;
    @Column(name = "NOM")
    private String nom;
    @Column(name = "ADRESSE")
    private String adresse;
    @Column(name = "DATE_DEBUT")
    @Temporal(TemporalType.DATE)
    private Date dateDebut;
    @Column(name = "DATE_FIN")
    @Temporal(TemporalType.DATE)
    private Date dateFin;
    @Column(name = "IS_ANNULATION")
    private Boolean isAnnulation;

    @OneToOne(mappedBy = "representation")
    private Salle salle;

    @ManyToOne
    private Spectacle spectacle;

}

显示所有节目的xhtml页面部分,我在其中使用了一些主要组件

<h:form id="form">  

        <p:dataGrid var="spec" value="#{menuCtrl.spectacles}" columns="3"  
                    rows="12" paginator="true"  
                    paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                    rowsPerPageTemplate="9,12,15">  

            <p:panel header="#{spec.nomSpectacle}" style="text-align:center">

                <h:panelGrid columns="1" style="width:100%"> 
                    <ui:param name="imgPath" value="images:#{spec.artiste.lienPhoto}.png" />
                    <p:graphicImage value="#{resource[imgPath]}" />  

                    <h:outputText value="#{spec.description}" />  

<!--                        <p:commandLink update=":form:carDetail" oncomplete="carDialog.show()" title="View Detail">  
                            <h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />   
                            <f:setPropertyActionListener value="{spec}"   
                                                         target="{tableBean.selectedCar}" />  
                    </p:commandLink>  -->
                </h:panelGrid>  
            </p:panel>  

        </p:dataGrid> 
    </h:form>

这里编辑的是使用的bean

    @ManagedBean(name = "menuCtrl")
@ApplicationScoped
public class MenuControleur extends AbstractControleur implements Serializable {
private static final Logger log = Logger.getLogger(ApplicationControleur.class);

// cache
private List<Spectacle> spectacles;
private List<Representation> representations;
private List<Artiste> artistes;


private List<Representation> representationsFiltrees;


@PostConstruct
public void init() {
    // instanciation couche [métier]
    super.initStubsPresentation();

    this.spectacles = this.stubsDaoPresentation.getAllSpectacle();
    this.representations = this.stubsDaoPresentation.getAllRepresentation();
    this.artistes = this.stubsDaoPresentation.getAllArtistes(); 

    log.info("sonar source Spectacle 1: " + this.spectacles);
    log.info("sonar source Representation 1: " + this.representations);
    log.info("sonar source Artiste 1: " + this.artistes);
}    

public List<Representation> getRepresentationsFiltrees() {
    return representationsFiltrees;
}

public void setRepresentationsFiltrees(List<Representation> representationsFiltrees) {
    this.representationsFiltrees = representationsFiltrees;
}



public String doHomme(){
    return "eticket.index";
}

public String doCart(){
    return "eticket.pageCart";
}

public String doShow(){
    return "eticket.pageShows";
}

/**
 * Creates a new instance of MenuControleur
 */
public MenuControleur() {  }

public List<Spectacle> getSpectacles() {
    return spectacles;
}

public void setSpectacles(List<Spectacle> spectacles) {
    this.spectacles = spectacles;
}

public List<Representation> getRepresentations() {
    return representations;
}

public void setRepresentations(List<Representation> representations) {
    this.representations = representations;
}

public List<Artiste> getArtistes() {
    return artistes;
}

public void setArtistes(List<Artiste> artistes) {
    this.artistes = artistes;
}    

}

1 个答案:

答案 0 :(得分:0)

您可以添加

`<h:link value="Second Page" outcome="secondpage" >
    <f:param name="id" value="#{bean.id}" />
</h:link>

`

第一页中的

<a href="secondpage.jsf?id=#{bean.id}">Second Page</a>

在第二页的bean中你需要这样的东西

@ManagedBean("bean2")
public class SecondPageBean {

  @ManagedProperty(value = "#{param.id}")
  private String id;
  private String name;

  @PostConstruct    
  public String init() {
     // initialieMySecondPageBasedOnIdFromFirstPage(id);
  }
}

您也可以在第二页xhtml中执行此操作以替换@ManagedProperty(value = "#{param.id}")

<f:metadata>
    <f:viewParam name="id" value="#{bean.id}" />
</f:metadata>

但是,如果要在两个连续请求之间共享对象/状态,请查看Flash范围。

Understand Flash Scope in JSF2