#java #spring #spring-boot #spring-data #thymeleaf
#java #весна #spring-boot #spring-данные #thymeleaf
Вопрос:
Я создаю приложение bankin’а, используя Spring boot и thymeleaf, я сталкиваюсь со следующей ошибкой при попытке показать данные учетной записи: Вызвано: org.attoparser.Исключение ParseException: Исключение, оценивающее выражение SpringEL: «compte.codeCompte» (шаблон: «comptes» — строка 34, col 14)
Вот мой банковский контролер:
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.projets.bank.entities.Client;
import com.projets.bank.entities.Compte;
import com.projets.bank.entities.CompteEpargne;
import com.projets.bank.metier.ServiceLayer;
@Controller
public class BankController
{
@Autowired
private ServiceLayer banque;
@RequestMapping("/operation")
public String index()
{
return "comptes";
}
@RequestMapping("/consulterCompte")
public String consulterCompte(Model model, String codeCompte)
{
try
{
Compte cp = banque.consulterCompte(codeCompte);
model.addAttribute("compte",cp);
}
catch(Exception e)
{
model.addAttribute("exception", e);
}
return "comptes";
}
}
comptes.html:
<div class="card-body">
<div>
<label>Code: </label>
<label th:text="${compte.codeCompte}">Code: </label>
</div>
<div>
<label>Solde: </label>
<label th:text="${compte.solde}"> </label>
</div>
<div>
<label>Date de création: </label>
<label th:text="${compte.dateCreation}"> </label>
</div>
<div>
<label>Type: </label>
<label th:text="${compte.class.simpleName}"> </label>
</div>
</div>
Compte.java:
public abstract class Compte implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String codeCompte;
private Date dateCreation;
private double solde;
@ManyToOne
@JoinColumn(name="CODE_CLI")
private Client client;
@OneToMany(mappedBy="compte" )
private Collection<Operation> operation;
public Compte() {
super();
}
public Compte(String codeCompte, Date dateCreation, double solde, Client client) {
super();
this.codeCompte = codeCompte;
this.dateCreation = dateCreation;
this.solde = solde;
this.client = client;
}
public String getCodeCompte() {
return codeCompte;
}
public void setCodeCompte(String codeCompte) {
this.codeCompte = codeCompte;
}
public Date getDateCreation() {
return dateCreation;
}
public void setDateCreation(Date dateCreation) {
this.dateCreation = dateCreation;
}
public double getSolde() {
return solde;
}
public void setSolde(double solde) {
this.solde = solde;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Collection<Operation> getOperation() {
return operation;
}
public void setOperation(Collection<Operation> operation) {
this.operation = operation;
}
}
Заранее спасибо.
Ответ №1:
Потому что, когда вы получаете запрос «/ operation» или происходит исключение, вы не устанавливаете атрибут «compte» в модели.
Есть два решения. вы должны выбрать тот, который вам нужен.
- добавить атрибут в запрос get
@RequestMapping("/operation")
public String index(Model model)
{
model.addAttribute("compte",new Compte());
return "comptes";
}
@RequestMapping("/consulterCompte")
public String consulterCompte(Model model, String codeCompte)
{
try
{
Compte cp = banque.consulterCompte(codeCompte);
model.addAttribute("compte",cp);
}
catch(Exception e)
{
model.addAttribute("exception", e);
model.addAttribute("compte",new Compte());
}
return "comptes";
}
Или
- добавьте th:if в html
<div class="card-body" th:if="${compte != null}">
<div>
<label>Code: </label>
<label th:text="${compte.codeCompte}">Code: </label>
</div>
.... // omit other code
</div>