【问题标题】:Executing a method in the Spring MVC from the JSP button从 JSP 按钮执行 Spring MVC 中的方法
【发布时间】:2017-09-03 06:54:26
【问题描述】:

我使用 Spring MVC 应用程序,我希望在单击 JSP 页面中的按钮后执行 POST 方法。登陆页面看起来像,

我想在点击Generate Address按钮后执行下面的Spring方法,

    @PostMapping(value = "/generateAddress")
    public String generateAddress() {    
        walletService.generateAddress();
        return "redirect:/";
    }

What I would like to achieve

单击Generate Address 按钮后,我想向generateAddress 方法发出POST 请求。

带有按钮代码的JSP页面,

<body class="page_container">
<div class="wallets_page">

    <form id="mnfrm" action="/" method="get" target="_blank">
        <div class="buttons_box">

            <button type="button" class="btn btn-default btn-lg active">
                Generate address
            </button>

            <button type="submit" class="btn btn-default btn-lg active" <%= wallets.isEmpty() ? "disabled" : ""%>
                    onclick="setFormAction('mnfrm', '/balance')">Balance
            </button>
            <button type="submit" class="btn btn-default btn-lg active" <%= wallets.isEmpty() ? "disabled" : ""%>
                    onclick="setFormAction('mnfrm', '/transactions')">Transactions
            </button>
            <button type="submit" class="btn btn-default btn-lg active" <%= wallets.isEmpty() ? "disabled" : ""%>
                    onclick="setFormAction('mnfrm', '/sendMoney')">Send money
            </button>
        </div>

        <div class="addresses_box">
            <label for="addressId">Address</label>
            <select id="addressId" name="id" class="form-control">
                <c:forEach var="wallet" items="${wallets}">
                    <option value="${wallet.id}"><c:out value="${wallet.address}"></c:out></option>
                </c:forEach>
            </select>
        </div>
    </form>
</div>

我试图在 button 中设置一个 onclick 不起作用。

    <button type="button" class="btn btn-default btn-lg active">
          Generate address
    </button>

关于如何正确执行的任何建议?

More Info

这是打开main.jsp登陆页面的方法,

@GetMapping(value = "/")
    public String showBitcoinWallet(final Model model) {
        List<WalletInfo> wallets = walletService.getAllWallets();
        model.addAttribute("wallets", wallets);
        return "main";
    }

【问题讨论】:

  • 你能澄清你想要达到的目标吗?如果您想进行 ajax 调用(无需重新加载页面),那么您的第二篇文章是正确的方法。另一方面,如果您想进行正常的发布调用(将重新加载页面的表单提交),那么您需要更正您的控制器代码。请参考此链接spring.io/guides/gs/handling-form-submission
  • 我让问题变得更简单,并澄清了我想要实现的目标
  • 那么你应该点击我在之前评论中发布的链接。
  • 我已经通过Ajax POST请求实现了

标签: java spring jsp spring-mvc


【解决方案1】:

我已经通过按钮 id 和 Ajax POST 请求的组合解决了这个问题。解决方案非常简单,我需要一个mvn clean 才能解决问题。

地址按钮

<button id="genAddress" type="button" class="btn btn-default btn-lg active">
                Generate address
            </button>

Ajax POST 请求,

<script>
    $("#genAddress").click(function () {
        $.ajax({
            type: "POST",
            url: 'generateAddress',

            success: function (data) {
                console.log("Wallet address generation success!")
            },

            failure: function (errMsg) {
                console.log(errMsg.toString())
            }
        });
    });
</script>

我假设我们可以在不提供任何数据的情况下发出 POST 请求,但是不知道该怎么做。好的,只需从Ajax POST 请求中删除数据提供代码即可:)

如前所述,这是执行POST请求的方法 来自Spring 控制器。

@PostMapping(value = "/generateAddress")
    public String generateAddress() {

        walletService.generateAddress();
        return "redirect:/";
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多