当前位置: 首页 > 知识库问答 >
问题:

ThymileAF-如何将固定对象发布到控制器?

吴凯
2023-03-14

我有一个复选框的集合,每个复选框代表一个“产品”的顶部。我想传递一个修改的产品对象,勾选的浇头存储为selectedToppings。

我已经尝试了下面的代码,但不起作用。问题是我正在传递一个空的“product”对象,并且只存储复选框值(作为“selectedToppings”)。如何将“product”对象与“selectedToppings”一起传递?

html(片段):

            <form method="post" th:object="${product}" th:action="@{/addItemToCart}">
            <div class="modal-body">
                    <div class="card-body">
                        <div th:each="topping : ${product.toppings}">
                            <div class="custom-control custom-checkbox my-1 mr-sm-2">
                                <input type="checkbox" class="custom-control-input" th:id="${topping} + ${product.id}" name="toppings" th:value="${topping}" />
                                <label class="custom-control-label" th:for="${topping} + ${product.id}" th:text="${topping}"></label>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-block btn-success">Add to Shopping Cart</button>
                </div>
            </form>

控制器:

@RequestMapping(value="/addItemToCart", method=RequestMethod.POST)
public String addItemToCart(@ModelAttribute("product") Product product, @RequestParam("toppings") List<String> toppings)
{
    Product newItem = product;
    newItem.setSelectedToppings(toppings);
    addItemToBucket(newItem);

    return "redirect:/menu";
}

实体:

public class Product
{
private String id;
private String name;
private String description;
private Double price;
private List<String> toppings;
private List<String> selectedToppings;

public Product()
{
 this.id = "";
 this.name = "";
 this.description = "";
 this.price = 0.0;
 this.toppings = new ArrayList<String>();
 this.selectedToppings = new ArrayList<String>();
}
public Product(String id, String name, String description, Double price, List<String> toppings)
{
    this.id = id;
    this.name = name;
    this.description = description;
    this.price = price;
    this.toppings = toppings;
    this.selectedToppings = new ArrayList<String>();
}
//...getters & setters
}

共有1个答案

卢元龙
2023-03-14

我不确定,我是否完全理解你的问题。

如果您在

th:field=“*{toppings}”

我现在注意到的一件事是,您缺少产品类的getter/setter。

 类似资料:
  • 问题内容: 我试图弄清楚如何将对象从表单发布到Web api服务。在我的控制器中,我定义了一个想要向其添加输入值的模型。 在我的输入字段中,我将它们绑定起来,例如: 在提交表单时,将这两个字段传递给我的服务并提交给我的WebApi 我已经通过两种方式尝试了此提交: 并且也如下,不声明参数 在webAPI中,我为帖子设置了一个方法 ReportLabel(dto)的定义如下: 我遇到的问题是,当我从

  • 我遵循了http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/将对象列表发布到我的Spring Controller。很快,当列表大小达到256时,我遇到了IndexOutOfBoundsException。 我找到了一个答案,它说在WebDataBinder中设置setAuto就可以解决这个问题。所以在我的控制器中,我

  • 问题内容: 我有一个定义了POST处理程序的控制器,如下所示: 以JSON格式查看时,UIVendor对象如下所示: UIVendor bean具有一个ArrayList类型的名为“ Emails”的字段,带有适当的设置器和获取器(getEmails / setEmails)。NotificationEmail对象也具有适当的公共设置器/获取器。 当我尝试使用以下代码发布对象时: 我在日志中收到此

  • 在集成测试Spring mvc Web应用程序时,有没有办法在模拟请求中传递整个表单对象?我所能找到的就是将每个字段单独作为参数传递,如下所示: 这对于小形状很好。但是如果我发布的对象变大了怎么办?此外,如果我可以发布整个对象,那么测试代码看起来会更好。 具体来说,我想通过复选框测试多个项目的选择,然后发布它们。当然,我可以只测试发布一个项目,但我想知道。。 我们使用的是包含Spring-test

  • 问题内容: 我如何/可以将json对象传递给webapi控制器(POST),并且 没有 类可将其映射到,而是将其作为任意内容来处理? 因此,如果我像这样从客户那里传递消息: 数据是这样的: 我的控制器将能够解析吗?下次数据可能与该签名不匹配(例如: 在我的控制器中,我尝试过: 和: 和(因为这实际上是与mongo数据库一起使用): 但是看起来对象映射器想要映射到字符串以外的其他东西… 问题答案:

  • 我有窗体和相应的控制器,对象列表被传递给它们。 实体类: 控制器: 形式: 我假设表单中的百里叶th:each循环变量不能是th:object=${ent2}(因为如果我这样做,select form返回null)。而th:value="${ent2.name}返回字符串值。所以我不得不将@RequestParam(th:value)发送给“save”方法。但是在这种情况下,我必须对数据库进行额外