gpt4 book ai didi

javascript - 将对象从 View 页面传递到 Spring Controller

转载 作者:行者123 更新时间:2023-11-30 05:45:01 24 4
gpt4 key购买 nike

我需要将一个复杂的对象从 View 页面传递到 Spring Controller 。我正在尝试使用模型属性(查看页面是使用 Thymeleaf 和 HTML 构建的)。

我的问题是,对象作为字符串而不是实际对象传递,这会在 Controller 端导致转换异常。下面以“category”为例,它是一个复杂的对象,里面包含了一个列表,一个数组,一个字符串等对象作为变量。类别作为字符串而不是对象本身传递。如何将此对象传递给 Controller ​​?

@Controller
public class QController extends WZController{

@RequestMapping(value = "/refreshfacets")
public String refreshfacets(HttpServletRequest request, HttpServletResponse response, Model model,
@ModelAttribute("refreshFacetsRequest") refreshFacetsRequestDTO refreshfacetsrequest) throws Exception {
Map<String, Object> responseMap = new HashMap<String, Object>();
ProductSearchResult productsearchresult = new ProductSearchResult();
//super.refreshFacets(request, response, model, productsearchresult);
return XXXX;
}
}
public class refreshFacetsRequestDTO {

private static final long serialVersionUID = 1L;

private Category category;
private String state;
private String program;
private String subject;
private String year;
private String price;

// Constructor, getter, setter methods;
}
<div th:remove="tag">
<form method="post" id="form1" th:action="@{/refreshfacets}" th:object="${refreshFacetsRequest}">
<input type="hidden" id="category" name="category" th:if="${category}" th:value="${category}"/>
<input type="text" id="state" name="state" th:if="${state}" th:value="${state}"/>
<input type="text" id="program" name="program" th:if="${program}" th:value="${program}"/>
<input type="text" id="subject" name="subject" th:if="${subject}" th:value="${subject}"/>
<input type="submit" th:attr="onsubmit=${'doAjaxPost()'}"></input>
</form>
</div>

请对此提出建议。传递对象的模型属性以外的任何其他选项也可以。如果是,请详细说明您的其他选择。

最佳答案

你似乎想使用 Thymeleaf的选择器表达式 th:object="${refreshFacetsRequest}" .表示法是 *{someField} .相应地更改您的元素

<input type="hidden" id="category" name="category" th:if="*{category}" th:value="*{category}"/>

以上将解析为 ${refreshFacetsRequest.category} .

编辑

从 View 到 Controller ,您所做的是让您的浏览器向 HTTP 服务器(您的 servlet 容器)发送 HTTP 请求。这里没有对象的概念。 <input>名称为 category 的字段将作为 HTTP POST 中的请求参数传递。

Spring 通常足够聪明,可以将请求参数转换为对象,但它需要一些信息。是Category枚举?如果是,Spring 将尝试使用 Category.valueOf(requestParam)转换它。如果它是一个类,它将尝试使用名称与 Category 的字段匹配的其他请求参数。类来实例化它并将其设置在 refreshFacetsRequestDTO 中您用 @ModelAttribute 声明的对象.

我不太明白你所说的检索到的值是一个字符串值是什么意思。是否出现错误消息?

关于javascript - 将对象从 View 页面传递到 Spring Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18471196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com