gpt4 book ai didi

java - 为什么模型在提交表单后不保存我的数据?

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:16 25 4
gpt4 key购买 nike

我的Spring MVC项目是一种事务服务,其中有客户端和事务列表。我也在使用 Hibernate。我有一个客户面板,客户可以在其中看到他的余额、之前的交易,并且能够进行新的交易。这是我的 .jsp 文件的片段

传输数据传递得很好,但“loggedClient”属性显示为空对象,nulls 作为值传递。这仅在单击提交按钮后发生,并且在刷新网站时不会发生。解决这个问题的关键可能是loggingClint.toString(),它返回:客户端 [id=0、firstName=null、lastName=null、email=null、balance=0]任何想法为什么会发生这种情况?如何解决此问题,以便在提交交易后我的“loggedClient”属性仍然填充客户端的数据?

<div id="wrapper">
<div id="header">
<h2>Welcome ${loggedClient.firstName} ${loggedClient.lastName}</h2>

</div>
<header><label class="balancelabel" > Balance: ${loggedClient.balance} </label></header>
</div>
<br><br>
<fieldset>
<legend>Transfer Money</legend>
<form:form action="transferMoney" modelAttribute="transferData" >
<table>
<tbody>
<tr>
<td><label>Recipients Email:</label></td>
<td><form:input path="mail" /></td>
</tr>
<tr>
<td><label>Amount :</label></td>
<td><form:input path="amount" /></td>
</tr>
<tr>
<td><label></label></td>
<td><input type="submit" value="Send Transfer" class="save" /></td>
</tr>
</tbody>
</table>
</form:form>
</fieldset><div id="container">

<div id="content">

<table>

<tr>
<th>From</th>
<th>To</th>
<th>Amount</th>
<th>Timestamp</th>
<!-- <th></th> -->
</tr>

<c:forEach var="tempTransfer" items="${transferList}">

<tr>
<td>${tempTransfer.sender.lastName}</td>
<td>${tempTransfer.receiver.lastName}</td>
<td>${tempTransfer.amount}</td>
<td>${tempTransfer.timestamp}</td>


</tr>

</c:forEach>

</table>

</div>

这是 Controller 代码片段:

@PostMapping("/transferMoney")
public String processTransfer(@ModelAttribute("loggedClient") Client loggedClient, @ModelAttribute("transferData") TransferDataContainer transferData, Model model) {

Client recipient = clientService.getClient(transferData.getMail());
System.out.println(loggedClient.toString());
if(transferData.getAmount() > loggedClient.getBalance()) {
System.out.println("You cannot send more than you have");
//System.out.println("You were trying to send : " + transferData.getAmount() +" but you have " + loggedClient.getBalance());
} else if(recipient==null) {
System.out.println("Invalid recepient");
} else {
int amount = transferData.getAmount();
// Updating data
loggedClient.setBalance(loggedClient.getBalance()-amount);
recipient.setBalance(recipient.getBalance()+amount);
Transfer transfer = new Transfer(amount, new Timestamp(System.currentTimeMillis()) , loggedClient, recipient);

clientService.saveClient(loggedClient);
clientService.saveClient(recipient);
transferService.saveTransfer(transfer);

}
return "client-logged";

}

最佳答案

我相信我现在看到了问题所在。发生的情况是 JSP 中的loggingClient 不在表单内,因此当提交表单时,仅发送transferData 中的内容。如果您想将loggingClient 片段发回,则需要将其折叠为transferData 中的隐藏输入字段。

例如,在您的 JSP 中:

<form...>
<form:hidden path="loggedClient.firstName" value="${loggedClient.firstName"/>
<form:hidden path="loggedClient.lastName" value="${loggedClient.lastName"/>
...
</form>

然后在您的控件中删除loggingClient参数。更新您的 TransferData 类以包含 LoggedClient 属性,然后您就可以开始了。

关于java - 为什么模型在提交表单后不保存我的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117615/

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