【发布时间】:2011-09-06 13:25:23
【问题描述】:
我想通过 portlet(Vaadin / Liferay 门户)中的按钮或菜单选择来更改我的 Chart(Pie) 的颜色(背景颜色数据集颜色等..)。我有点不知道该怎么做这是我的 Servlet:
import org.jfree.data.jdbc.JDBCPieDataset;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Connection;
public class PieChart extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection connection = null;
try {
Class.forName("org.postgresql.Driver").newInstance();
try {
connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/db", "user",
"password");
} catch (SQLException e) {
e.printStackTrace();
}
}
catch (InstantiationException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
JDBCPieDataset dataset = new JDBCPieDataset(connection);
try {
dataset.executeQuery("Select * From my_table");
JFreeChart chart = ChartFactory.createPieChart("Pie Chart", dataset, true, false, false);
if (chart != null) {
response.setContentType("image/png");
OutputStream out = response.
getOutputStream();
ChartUtilities.writeChartAsPNG(out, chart, 450, 400);
}
}
catch (SQLException e) {
e.printStackTrace();
}
try {
if(connection != null){connection.close();}
}
catch (SQLException e) {e.printStackTrace();}
}
我想要做的是,将选定的颜色发送到 Servlet,以便当我单击菜单选择(已经有菜单)时颜色会发生变化。
任何指南或类似的都会很棒。
现在假设我想更改图表的背景颜色。我会使用 chart.setBackgroundPaint(Color.blue);在 servlet 中手动更改颜色。但我想从 portlet 中做到这一点,这是我试图做的:
PieChart pie;
在初始化方法中,我配置菜单并尝试在点击时发送颜色
final MenuBar.MenuItem config = menubar.addItem("Config", null);
newItem.addItem("PieChart", new Command(){
public void menuSelected(MenuItem selectedItem) {
pie.chart.setBackgroundPaint(Color.blue);
}
});
我使用相同的方法从另一个类更改子窗口的背景颜色,它工作正常,但似乎在 servlet 中不起作用。
【问题讨论】:
-
顺便说一句:你应该看看连接池的概念(javax.sql.DataSource)...
标签: java servlets liferay portlet jfreechart