thinet
Junho 18, 2011, 12:19pm
#1
E ai galera, então estou com um problema para integrar o Fusion Charts com o vraptor.
Os gráficos gerados pela ferramenta necessitam que as tags do xml saim com essas informações:
<chart caption="Not Started">
<set label="Not Started" value="25"/>
<set label="Started" value="50"/>
<set label="In Between" value="25"/>
</chart>
Pesquisando eu vi que XSTream me permite fazer isso conforme esse blog:
http://liyaqatm.wordpress.com/2010/01/26/xstream-basic-introduction/
A minha pergunta é, como eu poderia utilizar essas funções do XSTream dentro do serializador do Vraptor?
Valeu
você pode usar as anotações do XStream na sua classe e o VRaptor vai usá-las automaticamente…
@XStreamAttribute
private String label;
@XStreamAttribute
private Integer value;
ou algo do tipo
thinet
Junho 18, 2011, 12:53pm
#3
valeu lucas, vou tentar e posto o resultado!
thinet
Junho 19, 2011, 12:49pm
#4
Ae galera só para registrar caso alguem necessite de usar o vraptor com o fusion charts segue o que eu fiz:
Gráfico gerado: PIE3D
Configs:
Vraptor blank project
Anotações xstream
na minha view apenas adicionei essa chamada:
<div id="chartContainer">FusionCharts will load here!</div>
<script type="text/javascript">
var myChart = new FusionCharts("<c:url value="/grafico/FCF_Pie3D.swf" />", "myChartId", "400", "300", "1", "0");
myChart.setDataURL("<c:url value="/chart.xml" />", "xml");
myChart.render("chartContainer");
</script>
No meu controller eu fiz assim:
@Get("/chart.xml")
public void getXML(){
logger.debug("** REQUISIÇÃO CONTROLLER XML **");
if(Validation.isValid(chartElements)){
this.result.use(Results.xml()).from(this.chartElements)
.include("labels").serialize();
}else{
this.result.include("message", "chartError");
this.result.redirectTo(PanelController.class).panel();
}
}
E as classes que geraram o gráfico:
@XStreamAlias(value = "graph")
public class PieChart implements ChartElements{
@XStreamAsAttribute
private String caption;
@XStreamImplicit
private List<PieChartSet> labels = new ArrayList<PieChartSet>();
public PieChart(String caption) {
this.caption = caption;
}
public void add(PieChartSet pieChartSet) {
labels.add(pieChartSet);
}
public String getCaption() {
return caption;
}
}
// classe que fica tageada pelo xstrem
@XStreamAlias(value = "set")
public class PieChartSet {
@XStreamAsAttribute
private String label;
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private String value;
public PieChartSet(String label, String name, String value) {
this.label = label;
this.name = name;
this.value = value;
}
public String getLabel() {
return label;
}
public String getValue() {
return value;
}
public String getName() {
return name;
}
Tomem cuidado no tipo de gráfico gerado, pois pode rolar um no data display por conta disso.
Essas classes ai geram esse xml (que é aceito pelo pie3D)
<graph caption="Not Started"><set label="Not Started" name="prod1" value="25"/><set label="Started" name="prod2" value="50"/><set label="In Between" name="prod3" value="25"/></graph>
valeu Lucas !!!
Estou tentando fazer funcionar fusion com vraptor só são entendi essa parte:
public class PieChart implements ChartElements{
Como ficou a classe ChartsElements implementada pela PieCharts?
thinet
Agosto 26, 2011, 8:02pm
#6
[quote=danielpx]Estou tentando fazer funcionar fusion com vraptor só são entendi essa parte:
public class PieChart implements ChartElements{
Como ficou a classe ChartsElements implementada pela PieCharts?[/quote]
Então cara, no meu Controller ai em cima eu queria passar vários tipos de gráficos, nesse exemplo eu usei pieChart, porém o serializador não deve ser específico de uma classe, portanto eu criei uma interface apenas de marcação, o xstream é inteligente para pegar o tipo certo e eu fico com um controller que gera o xml recebendo qualquer
classe que implemente pieChartElements, sacou?
Qualquer coisa posta ai sua dúvida!
Ok. vou ver se consigo fazer.
Obrigado
Cara , não consegui fazer ainda, tem como vc postar sua classe ChartElements pra eu ver onde to errando.
Obrigado