2010-08-01 10 views
1

J'ai deux problèmes avec primefaces <linechart> tag.problèmes avec primefaces linechart

Ceci est mon code backbean:

public class LiveChartBean { 
    private Integer primaryKey; 


    public Integer getPrimaryKey() { 
     return primaryKey; 
    } 


    public void setPrimaryKey(Integer primaryKey) { 
     this.primaryKey = primaryKey; 
    } 


    public List<ChartData> getChartData() { 
     return MonitoringManager.getChartData(3); 
    } 

} 

Et voici mon code page JSF:

<%@ page language="java" pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<%@taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%> 
<%@taglib uri="http://primefaces.prime.com.tr/ui" prefix="p"%> 

<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <base href="<%=basePath%>"> 

    <title>My JSF 'LiveChart.jsp' starting page</title> 
</head> 

<body> 
    <f:view> 
     <p:resources/> 
      <h:form> 
       <t:inputHidden id="primaryKey" value="#{ChartBean.primaryKey}" forceId="true" /> 
       <p:lineChart live="true" value="#{ChartBean.chartData}" var="data" 
        xfield="#{data.index}"> 
        <p:chartSeries label="ResponseTime" value="#{data.data}" /> 
       </p:lineChart> 
      </h:form> 
     </f:view> 
</body> 
</html> 

Ceci est mon entrée visages-config:

<managed-bean> 
    <managed-bean-name>ChartBean</managed-bean-name> 
    <managed-bean-class>com.pardis.healthMonitor.LiveChartBean</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
    <property-name>primaryKey</property-name> 
    <property-class>java.lang.Integer</property-class> 
    <value>#{param.primaryKey}</value> 
    </managed-property> 
</managed-bean> 

J'ai passé primaryKey par URL à la page jsf cela fonctionne très bien et la méthode setPrimaryKey

appelé pour la première fois, mais après que j'ai deux problèmes:

  1. Il Lancers:

    javax.el.ELException: Can't set property 'primaryKey' 
    

    sur la classe com.pardis.healthMonitor.LiveChartBean à la valeur null.

  2. getChartData() méthode seulement appelée sept fois !!!!

+0

Quand avez-vous un problème 1? Combien de fois pensez-vous que getChartData() sera appelé? – Dejell

+0

J'ai un problème 1 lorsque le graphique essaie de rafraîchir. Je m'attends à ce que getChartData() soit appelé jusqu'à ce que la fenêtre contenant soit fermée – arash

Répondre

0

Merci pour votre réponse, mais je pense que ces problèmes sont des bogues primefaces!

Le premier problème peut être résolu en utilisant la balise <t:savestate>.

J'ai résolu le deuxième problème avec:

<p:lineChart id="Chart" value="#{ChartBean.chartData}" var="data" xfield="#{data.index}"> 
    <p:chartSeries label="ResponseTime" value="#{data.data}" /> 
</p:lineChart> 
<p:poll interval="5" actionListener="#{ChartBean.refresh}" update="Chart" /> 

En définissant la propriété live false puis rafraîchir le tableau avec la balise , il fonctionne très bien.

+0

Vous pouvez ouvrir un problème ici: http://code.google.com/p/primefaces/issues/list – Dejell

+0

Je ne veux pas aider google code car il a interdit mon pays pour des questions politiques! – arash

0

Je pense que la question 1 est parce que votre bean est dans la portée de la requête.

Si vous utilisez JSF2, vous pouvez écrire au lieu de vue demande

<managed-bean-scope>view</managed-bean-scope>

Si vous utilisez JSF1.2 et RichFaces, vous pouvez utiliser

<a4j:keepAlive name="ChartBean" /> 

en savoir plus sur a4j:keepAlive here

Si vous n'utilisez ni l'un ni l'autre des éléments ci-dessus, pensez à utiliser la portée de session et peut-être à supprimer le bean de la portée après en utilisant avec:

session.removeAttribute("ChartBean");