Мой Spring MVC проект - это своего рода сервис транзакций, где у вас есть клиенты и список транзакций. Я также использую Hibernate. У меня есть панель клиента, в которой клиент видит свой баланс, предыдущие транзакции и может выполнять новые транзакции. Вот фрагмент моего .jsp файла
Передача данных передается просто отлично, но атрибут «loggedClient» отображается как пустой объект с нулями , передаваемыми в качестве значений. Это происходит только после нажатия кнопки Submit и не происходит при обновлении сайта. Ключом к решению этой проблемы может быть loggedClint.toString (), который возвращает:
Client [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>
А вот фрагмент кода контроллера:
@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";
}