2017-05-11 7 views
1

Ich versuche, ein paar Diagrammobjekte zu drucken, die innerhalb eines <p:repeat></p:repeat> Tags erzeugt werden.widgetVar funktioniert nicht richtig in p: wiederhole das Drucken Charts

Ich weiß, dass das reguläre <p:printer>-Tag nicht mit Primegraphs-Diagrammen aufgrund der Verwendung von HTML5 Canvas funktioniert ... es? Canvii?

So oder so, packte ich this JS function von einem anderen SO-Post, aber ich kann es nicht ganz so funktionieren, wie ich will.

Das ist mein Panel mit Diagrammen:

<script type="text/javascript"> 
    function exportChart(component) { 
     //export image 
     $('#output').empty().append(PF(component).exportAsImage()); 

     //show the dialog 
     PF('dlg').show(); 
    } 
</script> 

<p:dialog widgetVar="dlg" showEffect="fade" modal="false" header="Druckbares Diagramm als Bild" resizable="true"> 
    <p:outputPanel id="output" layout="block" style="width:1000px;height:300px"/> 
    <p:commandButton onClick="javascript:PF('dlg').hide()" value = "Schließen"/> 
</p:dialog> 
<p:panel id="charts"> 
    <p:repeat value="#{AttributeChartsController.kacModel.chartWrappers}" var="wrapper" style="height: #{wrapper.drawHeight}" > 
     <p:chart type="bar" model="#{wrapper.chart}" style="height: #{wrapper.drawHeight}" widgetVar="#{wrapper.widgetVarIdStr}"/> 

     <p:commandLink id="lnk#{wrapper.widgetVarIdStr}" onclick="print(#{wrapper.widgetVarIdStr})">Print</p:commandLink> 
    </p:repeat> 
</p:panel> 

ich meine widgetVar-widgetVarIdStr, die für jedes Diagramm wie diese erzeugt wird, Art:

//these are values retrieved from a database 
long widgetVarId = 0; 
for(Entry<String, HashMap<String, String>> entry : keyAttribs.entrySet()) { 
      this.chartWrappers.add(createChartWrapper(entry.getKey(), entry.getValue())); 
      widgetVarId++; 
     } 

private ChartWrapper createChartWrapper(String attribName, HashMap<String, String> keyValue) { 
    //... create Chart, ChartSeries, enter values, etc 
    wrapper.setWidgetVarId(widgetVarId); 
    return wrapper; 
} 

Das Ergebnis ist dies jedoch:

enter image description here Das Diagramm funktioniert, der Druckknopf ist da und hat den richtigen Wert, aber das WidgetV ar scheint innerhalb des Elements <p:repeat> nicht richtig eingestellt zu sein. Die widgetVar Eigenschaft ist auch nirgends in der endgültigen generierten Quelle der Seite zu finden, ist das normal?

Hier ist meine chartWrapper, gibt es wahrscheinlich eine elegantere Art und Weise zu tun, was ich hier tun möchte, aber ich werde dabei bleiben:

public class ChartWrapper { 
    private HorizontalBarChartModel chart; 
    private long drawHeight; 
    private long widgetVarId; 

    public HorizontalBarChartModel getChart() { 
     return chart; 
    } 
    public void setChart(HorizontalBarChartModel chart) { 
     this.chart = chart; 
    } 
    public long getDrawHeight() { 
     return this.drawHeight(); 
    } 
    public void setDrawHeight(long drawHeight) { 
     this.drawHeight = drawHeight; 
    } 
    public String getDrawHeightStr() { 
     return drawHeight+"px"; 
    } 
    public long getWidgetVarId() { 
     return widgetVarId; 
    } 
    public void setWidgetVarId(long widgetVarId) { 
     this.widgetVarId = widgetVarId; 
    } 
    public String getWidgetVarIdStr() { 
     return "attrChart"+widgetVarId; 
    } 
} 
+0

Haben Sie den generierten HTML-Code überprüft? Sind die WidgetVars dort? – Kukeltje

+0

Wie ich in meiner Frage gesagt habe, ist die widgetVar -Eigenschaft auch nirgends in der endgültigen generierten Quelle der Seite zu finden. Also nein, sie sind nicht aus irgendeinem Grund. Ich habe auch versucht, die ID-Eigenschaft für das ''-Tag zu setzen, aber das hat auch nicht funktioniert. Bearbeiten: Hier ist, wie es im Inspektor auf Firefox aussieht https://i.gyazo.com/6493d9afe41e411f47b104932172b9d2.png – Wep0n

+0

Sorry, verpasste diesen Teil ... Erwartete nicht so grundlegende Informationen (Kudos für die Überprüfung dieser im Voraus) in der Mitte eines Beitrags. Der WidVar-Wert ist irgendwo im Javascript, z.B. das zweite 'Diagramm' in '{PrimeFaces.cw ('Diagramm', 'Diagramm', 'im Falle des Beispiels' 'Export' ') (https://www.primefaces.org/showcase/ui/chart/export) .xhtml) es ist nicht als html-Attribut verfügbar Dies ist nur mit 'view-source' zu sehen – Kukeltje

Antwort

1

fand ich die Lösung für meine Probleme mit Hilfe von der Kommentar Abschnitt, kam es zu einigen fehlenden Anführungszeichen in meinem Jscript Anruf

onclick="exportChart(#{wrapper.widgetVarIdStr})" hat nicht funktioniert, weil es versuchte, ein Objekt an die Funktion übergeben. Ich änderte es accoridngly:

onclick="exportChart('#{wrapper.widgetVarIdStr}')" so jetzt die tatsächliche WidgetVar wird an die Funktion als Zeichenfolge übergeben, die wie erwartet funktioniert.

Verwandte Themen