Intro
I am rendering a chart to the output stream. Instead of streaming it directly to the response.out, I create a ChartResult , and let webwork do the chaining for me.
I generate the chart in one class, and I render it out in another class, efftectively decoupling the view from the actions. You can easily render it out to file or some view other than a web response.out if you wish.
Configuration
xwork.xml -result-types definitions
<result-types>
?? <result-type name="chart" class="myapp.webwork.extensions.chartResult"/>
</result-types>
xwork.xml -action definitions
<action name="viewModerationChart" class="myapp.webwork.actions.ViewModerationChartAction">
?? <result name="success" type="chart">
????? <param name="width">400</param>
????? <param name="height">300</param>
?? </result>
</action>
Source Codes
My result class search for a "chart" in the ValueStack and renders it out...
public class ChartResult implements? Result{
?? private int width;
?? private int height;
?? public void execute(ActionInvocation invocation)throws Exception{
?????? JFreeChart chart = (JFreeChart)invocation.getStack().findValue("chart");
?????? HttpServeletResponse response = ServeletActionContext.getResponse();
?????? OutputStream os = response.getOutputStream();
?????? ChartUtilities.writeChartAsPNG(os,chart,width,height);
?????? os.flush();
?? }
?????
?? public void setHeight(int height){
???? this.height=height;
?? }
??
?? public void setWidth(int width){
???? this.width=width;
?? }
}
public class ViewModerationChartAction extends ActionSupport{
?? private JFreeChart chart;
??
?? public String execute() throws Exception{
????? //chart creation logic ...
????? XYSeries dataSeries = new XYSeries(new Integer(1));
????? for(int i=0;i<=100;i++){
???????? dataSeries.add(i,RandomUtils.nextInt());
????? }
?????
????? XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);
????? ValueAxis xAxis = new NumberAxis("Raw Marks");
????? ValueAxis yAxis = new NumberXxis("Moderated Marks");
?????
????? chart = new JFreeChart(
????????????????????? "Moderation Function",
????????????????????? JFreeChart.DEFAULT_TITLE_FONT,
????????????????????? new XYPlot(
??????????????????????????? xyDataset,
??????????????????????????? xAxis,
??????????????????????????? yXis,
??????????????????????????? new
?????????? StandardXYItemRenderer(StandardXYItemRender.LINES),
??????????????????????????? false????????????????
????????????????????? );
????????????????????? ...
????? )
?? }
??
?? public JFreeChart getChart(){
????? return chart;
?? }
}