2016-08-17 1 views
2

Meine aktuelle Umgebung ist JRE 1.7, JSF 2.2, Eclipse Luna. In einer bestimmten Seite (entity_index.xhtml) meine Bewerbung habe ich folgende (PrimeFaces) Taste:Navigieren zu einer anderen Ansicht über einen Parameter

<p:commandButton value="Details" action="entity_details" 
       ajax="false" onclick="this.form.target='_blank'"> 
    <f:param name="id" value="#{entity.id}" /> 
</p:commandButton> 

Die Idee, eine Taste zur Verfügung zu stellen, damit der Benutzer es klicken und einige Details über die aktuelle Einheit werden in gezeigt werden ein weiterer Browser-Tab (Seite entity_details.xhtml). Dies ist eine Schaltfläche von vielen, so dass die entity_index.xhtml Seite viele Instanzen von Entity zeigt, jede mit einer Detail-Schaltfläche.

Die Schaltfläche funktioniert in dem Sinne, dass eine neue Registerkarte geöffnet wird und die richtige Seite (entity_details.xhtml) angezeigt wird, die Entitäts-ID jedoch niemals zur Bean der Detailseite (EntityDetailsMB) gelangt. Die Detailseite ist wie folgt:

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br" 
    template="/private/template/sbadmin.xhtml"> 
<f:metadata> 
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/> 
</f:metadata> 

<ui:define name="content"> 
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2> 
<h:form id="form"> 
... 
</ui:composition> 

Hinweis, dass es ein <f:metadata/> Element gewidmet die Parameter aus der Index-Seite gesendet erfassen und an die id Eigenschaft in EntityDetailsMB weiterleiten, wo es den folgenden:

public Entity getEntity() { 
    return entityById(id); 
} 

public Long getId() { 
    return id; 
} 

public void setId(Long value) { 
    id = value; 
} 

Da die setId()-Methode nie aufgerufen wird, gibt getEntity() immer null zurück.

Was fehlt, damit es funktioniert?

+0

haben Sie versucht, ein Ergebnis zu machen und eine param zu bekommen Daten aus dem ersten JSF Seite –

Antwort

4

p:commandButton führt eine POST Anfrage. Sie wollen einfach mit Ihrem Unternehmen Detail eine Ansicht, GET, nicht zu POST der Server, so benötigen Sie einen h:link:

<h:link value="Details" outcome="entity_details" target="_blank"> 
    <f:param name="id" value="#{entity.id}" /> 
</h:link> 

Dann wird die f:viewParam in der Zielseite wird die URL verarbeiten können Parameter:

<f:metadata> 
    <f:viewParam name="id" value="#{entityDetailsMB.id}"/> 
    <f:viewAction action="#{entityDetailsMB.init}" /> 
</f:metadata> 

ein f:viewAction Verwenden sie Ihre Einheit zu initialisieren, anstatt sie in einem Getter tun, which is discouraged:

public void init(){ 
    entity = entityById(id); 
} 

Siehe auch:

+1

Concise, direkt hinzufügen und , noch besser, richtig! – AlexSC

Verwandte Themen