2010-08-01 62 views
1

我有兩個問題primefaces <linechart>標籤。煩惱與primefaces線型圖

這是我的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); 
    } 

} 

這是我的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> 

這是我的臉-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> 

我已經通過了primaryKey通過url到jsf頁面,它工作正常並且setPrimaryKey方法

呼籲第一次,但在那之後我有兩個問題:

  1. 它拋出:

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

    com.pardis.healthMonitor.LiveChartBean類價值null

  2. getChartData()方法只叫七次!!!!

+0

你什麼時候有問題1? 你期望getChartData()被調用多少次? – Dejell 2010-08-01 19:10:58

+0

當圖表嘗試刷新時,我遇到了問題1。 我期望調用getChartData()直到包含窗口關閉爲止 – arash 2010-08-01 20:48:31

回答

0

感謝您的回覆,但我認爲這些問題是primefaces的錯誤!

第一個問題可以通過使用<t:savestate>標籤來解決。

我有解決的第二個問題:

<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" /> 

通過與標籤設置live屬性設置爲false,然後刷新圖表,它工作正常。

+0

您可以在此處打開問題: http://code.google。com/p/primefaces/issues/list – Dejell 2010-08-02 13:12:17

+0

我不想幫助谷歌代碼,因爲它禁止我的國家的政治問題! – arash 2010-08-03 07:04:01

0

我認爲問題1是因爲你的bean在請求範圍內。

如果您正在使用JSF2,你可以寫在

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

視圖,而不是請求,如果您正在使用JSF1.2和RichFaces的,你可以使用

<a4j:keepAlive name="ChartBean" /> 

閱讀更多關於a4j:keepAlive here

如果你既不使用以上,可以考慮使用會話範圍後也許去除範圍豆使用它:

session.removeAttribute("ChartBean");