spring-boot - 模板解析时出错
问题描述
代码 顺序
public class Order {
private String id;
private BigDecimal amount;
//get set constructor constructors
}
索引控制器
@Controller
public class IndexController {
@GetMapping
public String index() {
return "index";
}
}
订单控制器
@Controller
@RequestMapping("/orders")
public class OrderController {
private final OrderService orderService;
public OrderController(OrderService orderService) {
this.orderService = orderService;
}
@GetMapping
public Mono<String> list(Model model) {
var orders = orderService.orders();
model.addAttribute("orders", orders);
return Mono.just("orders/list");
}
}
订单生成器
public class OrderGenerator {
public Order generate() {
var amount = ThreadLocalRandom.current().nextDouble(1000.00);
return new Order(UUID.randomUUID().toString(), BigDecimal.valueOf(amount));
}
}
订单服务
@Service
public class OrderService {
private final Map<String, Order> orders = new ConcurrentHashMap<>(10);
@PostConstruct
public void init() {
var generator = new OrderGenerator();
for (int i = 0; i < 25; i++) {
var order = generator.generate();
orders.put(order.getId(), order);
}
}
public Mono<Order> findById(String id) {
return Mono.justOrEmpty(orders.get(id));
}
public Mono<Order> save(Mono<Order> order) {
return order.map(this::save);
}
private Order save(Order order) {
orders.put(order.getId(), order);
return order;
}
public Flux<Order> orders() {
return Flux.fromIterable(orders.values()).delayElements(Duration.ofMillis(128));
}
}
html
<body>
<h1>Orders</h1>
<table>
<thead>
<tr>
<th></th>
<th>Id</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<tr th:each="order : ${orders}">
<td th:text="${order.id}"></td>
<td th:text="${#numbers.formatCurrency(order.amount)}"
style="text-align: right"></td>
</tr>
</tbody>
</table>
</body>
错误
模板解析时出错(模板:“类路径资源 [templates/orders/list.html]”)
评估 SpringEL 表达式的异常:“order.id”(模板:“orders/list” - 第 19 行,第 9 列)
EL1008E: 在“reactor.core.publisher.FluxOnAssembly”类型的对象上找不到属性或字段“id” - 可能不是公共的或无效的?
我不知道如何解决这个问题,我希望你能帮助我。谢谢你的回复。
解决方案
您需要将 Flux 和 Mono 等反应原语添加为IReactiveDataDriverContextVariable
.
IReactiveDataDriverContextVariable reactiveDataDrivenMode =
new ReactiveDataDriverContextVariable(orders);
model.addAttribute("orders", reactiveDataDrivenMode);
推荐阅读
- android-studio - 缺少可绘制预览面板状态选择器
- mysql - 如何重命名 MySQL 的联合引擎服务器名称
- elasticsearch - 我有一台用于弹性搜索的单独机器。它是 500GB,但日志在 24 小时内消耗了全部内存。如何压缩它并释放内存?
- maven - 使用 Bitbucket 管道构建 JavaFx 应用程序
- sql - 多个 AND 和 WHERE IN 条件未按预期计算
- python - 如何从 pyspark 数据框中更快地保存 csv 文件?
- html - 如果父元素在网格列内,则溢出在转换时被禁用
- sql - 有没有办法在某个事件之后识别一个变量的变化
- powershell - 函数内部的 Import-Module,并使其在所有脚本中可用
- reactjs - 如何更改 react-select 中所有元素(边框、文本和箭头)的悬停?