【问题标题】:An error happened during template parsing模板解析时出错
【发布时间】:2019-08-05 10:03:41
【问题描述】:

代码 订购

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” - 可能不是公共的或无效的?

我不知道如何解决这个问题,希望你能帮助我。谢谢你的回复。

【问题讨论】:

    标签: spring-boot thymeleaf


    【解决方案1】:

    您需要将 Flux 和 Mono 等响应式原语添加为 IReactiveDataDriverContextVariable

    IReactiveDataDriverContextVariable reactiveDataDrivenMode =
                new ReactiveDataDriverContextVariable(orders);
    
        model.addAttribute("orders", reactiveDataDrivenMode);
    

    【讨论】:

    • 感谢您的回复。但它不起作用。我改变了控制器上的列表功能。
    • 谢谢,我知道错误在哪里。我在 pom.xml 中导入 spring-boot-starter-web 和 spring-boot-starter-webflux。我疯了
    【解决方案2】:

    检查您使用的是 spring-boot-starter-webflux 而不是 spring-boot-starter-web

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2019-05-02
      • 2021-11-05
      • 2020-03-01
      • 2013-02-03
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多