当已经涉及到一个Map时,如何在thymeleaf中获得一个变量?

2g32fytz  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(377)

在我的项目中,我有一个svg图(我希望这是正确的词),在这个图中,我显示了散列图中的数据。为了使这个更动态,我需要一个单一的变量来计算。
在这种情况下,我需要帮助将2020年更改为我在java后端设置的可变年份。但是它怎么能到达那里呢?

<circle th:each="einnahmenUmsatz : ${plotDatenEinnahmen}" 
        th:cx="${100*einnahmenUmsatz.getKey().getMonthValue() + 1200*(einnahmenUmsatz.getKey().getYear()%2020)}" 
        th:cy="${375-20*einnahmenUmsatz.getValue().getNumber().intValue()/1000}" 
        th:data-value="${einnahmenUmsatz.getValue().getNumber().intValue()}" r="4">
    <title th:text="${einnahmenUmsatz.getValue()}"></title>
</circle>
fnatzsnv

fnatzsnv1#

只需将另一个属性添加到 Model (使用Spring时)或另一个变量 Context (当使用普通胸腺肽时):

model.addAttribute("year", 2020); // Spring Web/MVC
// or
context.addVariable("year", 2020); // plain Thymeleaf

然后在模板中使用它(替换 %- ):

th:cx="${100*einnahmenUmsatz.getKey().getMonthValue() + 1200*(einnahmenUmsatz.getKey().getYear()-year)}"

带Spring的完整工作示例(稍加修改):

@Controller
public class GraphicsController {

    @GetMapping("/graphics")
    public String getGraphics(Model model) {

        // generate test data
        final Map<YearAndMonth, Integer> data = new LinkedHashMap<>();
        for (int y = 0; y < 3; y++) {
            for (int m = 1; m <= 12; m++) {
                data.put(new YearAndMonth(2019+y, m), 6000 + (6*y + m) * 1000);
            }
        }

        model.addAttribute("data", data);
        model.addAttribute("year", 2020);
        return "graphics";
    }

    public static class YearAndMonth {
        private final int year;
        private final int month;

        public YearAndMonth(final int year, final int month) {
            this.month = month;
            this.year = year;
        }

        public int getYear() {
            return year;
        }

        public int getMonth() {
            return month;
        }
    }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
  <meta charset="utf-8">
  <title>SVG with Thymeleaf</title>
</head>
<body>
<svg viewBox="-1200 -400 3800 800">
  <circle th:each="entry : ${data}"
          th:cx="${100*entry.getKey().getMonth() + 1200*(entry.getKey().getYear()-year)}"
          th:cy="${375-20*entry.getValue()/1000}"
          th:data-value="${entry.getValue()}"
          r="4">
    <title th:text="${entry.getValue()}"></title>
  </circle>
</svg>
</body>
</html>

相关问题