java - 如何将 Spring Controller 中的对象列表绑定(bind)到 thymeleaf

标签 java spring thymeleaf

我有一个 MenuItems 域和一个菜单容器,其中包含所有 MenuItems 的列表,我试图将数组列表从 spring Controller 传递到前端。

这是 MenuItems 域:

public class MenuItems {

private String itemName;

private String itemDescription;

private String itemPrice; 

private String itemQuantity;

private String itemCategory;



public String getItemName() {
    return itemName;
}

public void setItemName(String itemName) {
    this.itemName = itemName;
}

public String getItemDescription() {
    return itemDescription;
}

public void setItemDescription(String itemDescription) {
    this.itemDescription = itemDescription;
}

public String getItemPrice() {
    return itemPrice;
}

public void setItemPrice(String itemPrice) {
    this.itemPrice = itemPrice;
}

public String getItemQuantity() {
    return itemQuantity;
}

public void setItemQuantity(String itemQuantity) {
    this.itemQuantity = itemQuantity;
}

public String getItemCategory() {
    return itemCategory;
}

public void setItemCategory(String itemCategory) {
    this.itemCategory = itemCategory;
}

}

这是菜单容器:

public class MenuContainer {

private List<MenuItems> menuAList;


public List<MenuItems> getMenuItems() {
    return menuAList;
}

public void setMenuItems(List<MenuItems> menuList) {


    menuAList = menuList;
}

public String toString(){
    return menuAList.toString();  
 }

}

这是 Controller :

@RequestMapping(value = "/admin/home", method = RequestMethod.GET)
public String home(Model model) throws Exception{
    List<MenuItems> menuItems = KafkaConsumerFromTopic.menuArrayL;
    MenuContainer menuL = new MenuContainer();
    menuL.setMenuItems(menuItems);
    model.addAttribute("menuItems", menuL);
    //System.out.println(menuL.toString());
    return "/admin/home";
}

这是我在 thymeleaf 模板中的内容:

 <table>
        <thead>
            <tr>
                <th>Item Name</th>
                <th>Item Description</th>
                <th>Item Price</th>
                <th>Item Quantity</th>
                <th>Item Category</th>
            </tr>
        </thead>
        <tbody>
            <tr th:each="menuItem : ${menuItems}">
                <td th:text="${menuItem.itemName}"></td>
               <td th:text="${menuItem.itemDescription}"></td>
               <td th:text="${menuItem.itemPrice}"></td>
               <td th:text="${menuItem.itemQuantity}"></td>
               <td th:text="${menuItem.itemCategory}"></td>
            </tr>

        </tbody>
    </table>

这是我收到的错误消息:

org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-10] 异常处理模板“/admin/home”:评估 SpringEL 表达式的异常:“menuItem.itemName”(模板:“/admin/home” - 第 23 行,第 25 栏)

最佳答案

您的模型属性设置错误。

model.addAttribute("menuItems", menuL);

这自然应该是您的菜单项列表,而不是您的自定义容器。试试这个:

model.addAttribute("menuItems", menuItems);

如果你坚持传入菜单容器对象,可以尝试:

MenuContainer menuContainer = new MenuContainer();
menuL.setMenuItems(menuItems);
model.addAttribute("menuContainer", menuContainer);

[...]

<tr th:each="menuItem : ${menuContainer.menuItems}">

关于java - 如何将 Spring Controller 中的对象列表绑定(bind)到 thymeleaf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57579378/

相关文章:

java - 我该如何将 Ctrl+Click 包含为右键单击? ( java )

java - 在应用程序启动时启动所有 servlet

java - 了解 Spring 重定向

spring - 为什么我的自定义 ClientHttpRequestInterceptor 响应为空

java - 如何使用 Bootstrap 从 slider 中的 URL 渲染 html 上的图像

java - Thymeleaf 迭代嵌套列表来为高尔夫应用程序创建表 <th> 标题和 <td> 文本

java - 使用 thymeleaf 和 spring boot 的动态下拉菜单

java - 如何在 BlackBerry 中关闭全局对话框并显示另一个对话框?

java - 当数据库中的特定表值发生更改时通知应用程序

java - 如何在 MongoDB 中加密字段