Apache ECharts can be configured inline using the "value" facet.
<h:form>
<p:messages id="messages" showSummary="false" showDetail="true">
<p:autoUpdate/>
</p:messages>
<div class="card">
<h5>Facet</h5>
<pe:echart style="width: 50vw; height: 400px;" widgetVar="facetEChart">
<p:autoUpdate on="eventTheme"/>
<p:ajax event="itemSelect" listener="#{eChartController.itemSelect}"/>
<f:facet name="value">
{
series: [
{
type: 'gauge',
startAngle: 180,
endAngle: 0,
center: ['50%', '75%'],
radius: '90%',
min: 0,
max: 1,
splitNumber: 8,
axisLine: {
lineStyle: {
width: 6,
color: [
[0.25, '#FF6E76'],
[0.5, '#FDDD60'],
[0.75, '#58D9F9'],
[1, '#7CFFB2']
]
}
},
pointer: {
icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
length: '12%',
width: 20,
offsetCenter: [0, '-60%'],
itemStyle: {
color: 'auto'
}
},
axisTick: {
length: 12,
lineStyle: {
color: 'auto',
width: 2
}
},
splitLine: {
length: 20,
lineStyle: {
color: 'auto',
width: 5
}
},
axisLabel: {
color: '#464646',
fontSize: 20,
distance: -60,
rotate: 'tangential',
formatter: function (value) {
if (value === 0.875) {
return 'Grade A';
} else if (value === 0.625) {
return 'Grade B';
} else if (value === 0.375) {
return 'Grade C';
} else if (value === 0.125) {
return 'Grade D';
}
return '';
}
},
title: {
offsetCenter: [0, '-10%'],
fontSize: 20
},
detail: {
fontSize: 30,
offsetCenter: [0, '-35%'],
valueAnimation: true,
formatter: function (value) {
return Math.round(value * 100) + '';
},
color: 'inherit'
},
data: [
{
value: 0.7,
name: 'Grade Rating'
}
]
}
]
}
</f:facet>
</pe:echart>
</div>
</h:form>
package org.primefaces.showcase.view.chartjs;
import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.RequestScoped;
import jakarta.faces.application.FacesMessage;
import jakarta.faces.context.FacesContext;
import jakarta.inject.Named;
import java.io.Serial;
import java.io.Serializable;
import org.primefaces.extensions.event.EChartEvent;
@Named
@RequestScoped
public class EChartController implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private String json;
@PostConstruct
public void init() {
createJsonModel();
}
public void createJsonModel() {
json = "{\n" +
" \"title\": {\n" +
" \"text\": \"Apache ECharts Line Chart\"\n" +
" },\n" +
" \"xAxis\": {\n" +
" \"type\": \"category\",\n" +
" \"data\": [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\n" +
" },\n" +
" \"yAxis\": {\n" +
" \"type\": \"value\"\n" +
" },\n" +
" \"series\": [\n" +
" {\n" +
" \"name\": \"Some data\",\n" +
" \"data\": [150, 230, 224, 218, 135, 147, 260],\n" +
" \"type\": \"line\"\n" +
" },\n" +
" {\n" +
" \"name\": \"Other data\",\n" +
" \"data\": [110, 260, 124, 118, 235, 100, 200],\n" +
" \"type\": \"line\"\n" +
" }\n" +
" ],\n" +
" \"legend\": {},\n" +
" \"dataZoom\": [\n" +
" {\n" +
" \"type\": \"slider\"\n" +
" }\n" +
" ]\n" +
"}";
}
public void itemSelect(EChartEvent event) {
FacesContext facesContext = FacesContext.getCurrentInstance();
String message = "Clicked " + event.getName()
+ ", series index " + event.getSeriesIndex()
+ ", data index " + event.getDataIndex()
+ ", value " + event.getData();
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, message, null);
facesContext.addMessage(null, facesMessage);
}
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
}