Произошла ошибка при разборе шаблона - PullRequest
0 голосов
/ 14 марта 2019

Код Заказ

public class Order {
    private String id;
    private BigDecimal amount;
//get set constructor constructors
}

IndexController

@Controller
public class IndexController {
    @GetMapping
    public String index() {
        return "index";
    }
}

OrderController

@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");
    }
}

OrderGenerator

public class OrderGenerator {
    public Order generate() {
        var amount = ThreadLocalRandom.current().nextDouble(1000.00);
        return new Order(UUID.randomUUID().toString(), BigDecimal.valueOf(amount));
    }
}

OrderService

@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>

ошибка

Произошла ошибка при разборе шаблона (template: "ресурс пути к классу [templates / orders / list.html]")

Исключениевычисление выражения SpringEL: "order.id" (шаблон: "orders / list" - строка 19, столбец 9)

EL1008E: Свойство или поле 'id' невозможно найти в объекте типа 'реактор.core.publisher.FluxOnAssembly '- может быть, не является общедоступным или недействительным?

Я не знаю, как решить проблему, надеюсь, вы можете мне помочь. Спасибо за ответ.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

проверьте, что вы используете spring-boot-starter-webflux вместо spring-boot-starter-web

0 голосов
/ 14 марта 2019

Вам нужно добавить реактивные примитивы, такие как Flux и Mono, как IReactiveDataDriverContextVariable.

IReactiveDataDriverContextVariable reactiveDataDrivenMode =
            new ReactiveDataDriverContextVariable(orders);

    model.addAttribute("orders", reactiveDataDrivenMode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...