Я использую struts2-jquery-chart-plugin-3.2.1. Я хочу показать гистограмму, заполненную списком.

Вот мой код:

Класс действия:

public class FinancialChartAction extends ActionSupport{
    private List<FinChartModel> wholeChartModels;

    @SkipValidation
    @Action(value = "getFinancialChartData", results = {
        @Result(name = "success", type = "json", params = {
            "wholeChartModels"
        })}){
        wholeChartModels = new ArrayList<FinChartModel>();     
        wholeChartModels.add(new FinChartModel("2020/01/01", 1000));
        wholeChartModels.add(new FinChartModel("2020/01/02", 2000));
        wholeChartModels.add(new FinChartModel("2020/01/03", 3500));
        wholeChartModels.add(new FinChartModel("2020/01/04", 550));

}

    public List<FinChartModel> getWholeChartModels() {
        return wholeChartModels;
    }
}

Класс модели:

    private String registerDate;
    private Long sellValue;

    public String getRegisterDate() {
        return registerDate;
    }

    public void setRegisterDate(String registerDate) {
        this.registerDate = registerDate;
    }

    public Long getSellValue() {
        return sellValue;
    }

    public void setSellValue(Long sellValue) {
        this.sellValue = sellValue;
    }

    FinChartModel(String registerDate,Long sellValue){
        this.registerDate = registerDate;
        this.sellValue = sellValue;
    }

JSP:

<div id="gain_chart">
    <sjc:chart
        id="chartAjaxTwo"
        cssStyle="width: 600px; height: 400px;">
        <sjc:chartData
            dataType="json"
            id="chartAjaxTwoData2"
            label="List -ListValue-"
            href="%{getFinancialChartData}"
            list="wholeChartModels"
            listKey="registerDate"
            listValue="sellValue"
            bars="{show : true, barWidth: 0.7}"
            />
    </sjc:chart>
</div>

Как видите, я хочу, чтобы на моей диаграмме отображались строки по оси X. В этой конфигурации я не мог видеть никаких данных на своей гистограмме. Можно ли использовать String в качестве оси x гистограммы? если да, что не так с моим кодом?

1
dg_theDeveloper 28 Дек 2020 в 11:10

1 ответ

Лучший ответ

Вы не можете увидеть никаких данных на своей линейчатой ​​диаграмме, потому что вы используете неправильный URL-адрес для получения данных в тег chartData. В теге chartData вы получаете данные с помощью Ajax. Таким образом, вы должны ссылаться на URL-адрес, который возвращает данные в приемлемом формате. В вашем случае вы использовали тип данных JSON. В вашем классе действий у вас есть такое действие, которое возвращает результат типа json. На пути к классу должен быть доступен плагин json. Чтобы создать URL-адрес для действия, вы можете использовать

<s:url var="chartDataUrl" action="getFinancialChartData"/>

Затем укажите его в теге chartData

href="%{#chartDataUrl}"

Результат json по умолчанию возвращает объект top из ValueStack, сериализованный в объект json, и Struts помещает в него экземпляр действия.

@Result(name = "success", type = "json")

Атрибут list привязывается к переменной класса действия, у которого есть соответствующий геттер. Поскольку вы используете список объектов, то listKey и listValue по умолчанию привязаны к объектным переменным с помощью геттеров.

Обратите внимание, что версия struts2-jquery-chart должна быть обновлена, чтобы включить библиотеку Flot, которая используется плагином для рисования диаграммы. Дополнительные сведения см. В этом ответе.

0
Roman C 29 Дек 2020 в 07:22