【问题标题】:How to get a list of objects from a JSP in a Controller如何从控制器中的 JSP 获取对象列表
【发布时间】:2019-09-05 05:40:39
【问题描述】:

我的代码有一些问题。我尝试从控制器中的 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 中获取我的控制器中的列表,因此我只是尝试查看我的列表在我的控制器中是否为空。如果有人可以帮助我解决这个问题并解释我做错了什么请..

【问题讨论】:

    标签: java spring spring-boot jsp jakarta-ee


    【解决方案1】:

    您好,我认为您向控制器发出发布请求的方式有点混乱,所以我建议您尝试这样做:

    首先在您的 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 + "]";
        }
    
    }
    
    

    将此ID添加到您的按钮“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 控制器。

    【讨论】:

    • 你好,首先谢谢你的回答,我想在春天做,因为我对 jquery 和 ajax 一点都不熟悉,但是神经元。我已经实现了您的解决方案,但它似乎只返回一个对象而不是对象列表,并且所有属性都是空的
    • 您可以使用控制器返回一个对象或列出一个对象,您只需这样做,model.addAtrribute("any_name_youwant","any_object_you_want"); model.addAtrribute("another_name_youwant","another_object_you_want"); ModelAndView mv = new ModelAndView("fileName_of_your_jsp"); return mv; 并且您可以使用 ${any_name_youwant} 在您的 html 中访问它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2016-07-26
    • 2016-05-12
    相关资源
    最近更新 更多