2010-08-01 63 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");