【问题标题】:troubles with primefaces linechartprimefaces折线图的问题
【发布时间】:2010-08-01 12:45:55
【问题描述】:

primefaces <linechart> 标签有两个问题。

这是我的后台代码:

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>

这是我的 faces-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>

我已经通过 url 将 primaryKey 传递给 jsf 页面,它工作正常,setPrimaryKey 方法

第一次打电话,但之后我遇到了两个问题:

  1. 它抛出:

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

    在类com.pardis.healthMonitor.LiveChartBean 上赋值null

  2. getChartData() 方法只调用了七次!!!

【问题讨论】:

  • 你什么时候遇到问题1?您希望 getChartData() 被调用多少次?
  • 我在图表尝试刷新时遇到问题 1。我希望 getChartData() 被调用,直到包含窗口被关闭

标签: java jsf primefaces


【解决方案1】:

我认为第 1 个问题是因为您的 bean 在请求范围内。

如果你使用的是JSF2,你可以写视图而不是请求

&lt;managed-bean-scope&gt;view&lt;/managed-bean-scope&gt;

如果你使用的是JSF1.2和RichFaces,你可以使用

<a4j:keepAlive name="ChartBean" />

阅读更多关于a4j:keepAlive here

如果您不使用上述任何一种,请考虑使用会话范围,并可能在使用以下 bean 后将其从范围中删除:

session.removeAttribute("ChartBean");

【讨论】:

    【解决方案2】:

    感谢您的回复,但我认为这些问题是 primefaces 的错误!

    第一个问题可以通过&lt;t:savestate&gt;标签解决。

    我已经解决了第二个问题:

    <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,然后用&lt;poll&gt;标签刷新图表,就可以正常工作了。

    【讨论】:

    • 我不想帮助谷歌代码,因为它因为政治问题禁止了我的国家!
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多