Как получить список объектов из JSP в контроллере - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть некоторые проблемы с моим кодом.Я пытаюсь получить список объектов из jsp в моем контроллере, чтобы отправить его моему сервису с POST

Когда я пытаюсь получить список в моем контроллере с аннотацией @ModelAttribute, он возвращает мне пустой список,Здесь мой класс контроллера и мой jsp

Контроллер


    @GetMapping("/OvedraftsCustomer")
    public String getOverdraftsCustomers(ModelMap model){
        List<AccountDTO> overdraftAccounts = overdraftService.getOverdraftAccounts();
        model.addAttribute("overdraftAccounts",overdraftAccounts);
        return "agios/displayOverdraftCustomers";
    }


    @PostMapping("/agioDetails")
    public String getOverDraftDetails(@ModelAttribute("account") ArrayList<AccountDTO> account, BindingResult binding, ModelMap model) throws ParseException {
        model.addAttribute("accounts",account);
        logger.info("taille : " + account.size());
        return "redirect:agiosInfo";
    }


JSP

<table class="w3-table-all w3-hoverable">

        <tr class="w3-hover-blue w3-blue">
            <th>Nom</th>
            <th>Prénom </th>
            <th>iban</th>
            <th>email</th>
            <th>Découvert Autorisé</th>
            <th>Découvert actuel</th>
            <th>Taux débiteurs</th>
        </tr>
        <c:forEach items="${overdraftAccounts}" var="overdraftAccounts">
            <tr class="w3-hover-blue">
                <td><c:out value="${overdraftAccounts.getCustomer().getName()}" /></td>
                <td><c:out value="${overdraftAccounts.getCustomer().getSurname()}" /></td>
                <td><c:out value="${overdraftAccounts.getIban()}" /></td>
                <td><c:out value="${overdraftAccounts.getCustomer().getEmail()}" /></td>
                <td><c:out value="${overdraftAccounts.getCustomer().getAgioParameters().getAuthorizedOverdraft()}" /></td>
                <td><c:out value="${overdraftAccounts.getOldBalances().get(overdraftAccounts.getOldBalances().size()-1).getBalance()}" /></td>
                <td><c:out value="${overdraftAccounts.getCustomer().getAgioParameters().getBorrowingRate()}" /></td>
            </tr>
        </c:forEach>
    </table>
        </br>
        </br>

    <form method="POST" action="/agioDetails" modelAttribute="account">
       <c:forEach var="test" items="${accounts}" varStatus="status">
            <form:input path="accounts[${status.index}].getIban()" name="iban" id="iban" value="test.getIban()" />
            <form:input path="accounts[${status.index}].getBalance()" name="balance" id="balance" value="test.getBalance()" />
            <form:input path="accounts[${status.index}].oldBalances()" name="oldBalances" id="oldBalances" value="test.getOldBalances()" />
            <form:input path="accounts[${status.index}].getCustomer()" name="customer" id="customer" value="test.getCustomer()" />
            <form:input path="accounts[${status.index}].getAgios()" name="agios" id="agios" value="test.getAgios()" />
        </c:forEach>
        </br>
        <table align="center">
            <tr>
                <td colspan="2"><input class="w3-button w3-padding-large w3-blue" type="submit" value="Consulter le détail"/></td>
            </tr>
        </table>
    </form>

В настоящее время я просто пытаюсь получить список в моем контроллере из моего jsp, поэтомуЯ просто пытаюсь проверить, не пустой ли мой список в контроллере.Если кто-то может помочь мне с этой проблемой и объяснить, что я сделал неправильно, пожалуйста ..

1 Ответ

0 голосов
/ 15 апреля 2019

Привет, я думаю, что ваш способ отправки запроса на контроллер немного запутан, поэтому я рекомендую вам попробовать сделать это:

Сначала в вашем Java создать класс сущностей для ваших деталей, например

Details.java

public class Details {
    private String iban;
    private Integer balance;
    private Integer oldBalances;
    private String customer;
    private String agios;
    public String getIban() {
        return iban;
    }
    public void setIban(String iban) {
        this.iban = iban;
    }
    public Integer getBalance() {
        return balance;
    }
    public void setBalance(Integer balance) {
        this.balance = balance;
    }
    public Integer getOldBalances() {
        return oldBalances;
    }
    public void setOldBalances(Integer oldBalances) {
        this.oldBalances = oldBalances;
    }
    public String getCustomer() {
        return customer;
    }
    public void setCustomer(String customer) {
        this.customer = customer;
    }
    public String getAgios() {
        return agios;
    }
    public void setAgios(String agios) {
        this.agios = agios;
    }
    @Override
    public String toString() {
        return "Details [iban=" + iban + ", balance=" + balance + ", oldBalances=" + oldBalances + ", customer="
                + customer + ", agios=" + agios + "]";
    }

}

и добавьте этот идентификатор к вашей кнопке "btnSubmit" и поместите его в свой javascipt (я использую jquery)

var details = {};
$("#btnSubmit").click(function(){
details.iban = $("#iban").val();
details.balance = $("#balance ").val();
details.oldBalances = $("#oldBalances").val();
details.customer = $("#customer ").val();
details.agios = $("#agios ").val();
$.ajax({
          method: "POST",
          headers: {
            "Content-Type":"application/json"  
          },
          url: "/agioDetails",
          data: JSON.stringify(details ),
          success: function( result ) {
           alert("okay");
          }
          });
})

и сделайте это с вашим контроллером

@PostMapping(value = "/agioDetails", consumes = "application/json")
    ModelAndView getRecord(@RequestBody Details details) throws SQLException, Exception {
        System.out.println(details);
        ModelAndView mv = new ModelAndView("index");
        return mv;
    }

данные должны были быть переданы вашему Java-контроллеру без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...