【发布时间】:2020-03-25 11:40:03
【问题描述】:
我需要向这个控制器提交一个对象:
@RequestMapping(value = "/insert_pedido", method=RequestMethod.POST)
@ResponseBody
public String insert_pedido(@RequestParam("cliente") Integer cliente_id, @ModelAttribute("pedido") Pedido pedido) throws JsonProcessingException {
...
}
通过这样的javascript函数:
function insert_pedido(e) {
var cliente = e.dataset.cliente;
var pedido = ?
var url = e.dataset.url;
var xhr = new XMLHttpRequest();
xhr.open("POST", url_pedido, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
...
}
};
formData = new FormData();
formData.append("cliente", cliente);
formData.append("pedido", pedido);
xhr.send(formData);
}
我需要在变量pedido 中构建控制器将由@ModelAttribute("pedido") Pedido pedido 读取的数据。这可能吗?如果是这样,我该怎么做?
需要添加到这个对象的字段是:
<div class="form" id="inner-form">
<div class="form-group">
<label for="transactionId">transactionId</label>
<input type="text" name="transactionId" class="form-control" id="transactionId">
</div>
<div class="form-group">
<label for="metodoPagamento">metodoPagamento</label>
<input type="text" name="metodoPagamento" class="form-control" id="metodoPagamento">
</div>
<div class="form-group">
<label for="dataCompra">dataCompra</label>
<input type="date" name="dataCompra" class="form-control" id="dataCompra">
</div>
<input th:if="${command}" type="hidden" name="cliente" th:value="${command.id}">
<div class="form-group">
<label for="produtos">produtos</label>
<select multiple="multiple" class="form-control" id="produtos" name="produtos">
<option th:each="option : ${produtos}" th:value="${option.id}" th:text="${option.nome}"></option>
</select>
</div>
</div>
更新
我试试这个:
var pedido = new FormData();
pedido.append('transactionId', document.getElementById('transactionId').value);
pedido.append('metodoPagamento', document.getElementById('metodoPagamento').value);
pedido.append('dataCompra', document.getElementById('dataCompra').value);
pedido.append('produtos', document.getElementById('produtos').value);
我在数据库中保留了一个实体 pedido,但所有字段都为空。
即使在 javascript 代码中,如果我添加这个:
console.log(' transactionId: '+document.getElementById('transactionId').value);
console.log(' metodoPagamento: '+document.getElementById('metodoPagamento').value);
console.log(' dataCompra: '+document.getElementById('dataCompra').value);
console.log(' cliente: '+document.getElementById('cliente').value);
console.log(' produtos: '+document.getElementById('produtos').value);
只有字段 dataCompra 和 cliente 获得正确的值。其他人正在获得null 价值。都是上面的html。
【问题讨论】:
-
所以它不起作用吗?我不懂西班牙语,但是对于插入,我不知道为什么需要将 id 作为请求参数传递。此外,您还希望将其作为字符串化 json 发送到后端,因为这似乎是在模型上处理的内容。
-
字段不在
form标记内,而是在div内。在 javascrtip 代码中,我需要以某种方式构建一个结构,该结构应该由控制器中的参数@ModelAttribute("pedido") Pedido pedido读取
标签: javascript spring forms form-data modelattribute