【问题标题】:Form sending data to controller once, then it doesn't work表单向控制器发送一次数据,然后它不起作用
【发布时间】:2016-12-14 12:37:42
【问题描述】:

我有一个带棋盘的 jsp 来玩井字游戏。每次单击它后,我都会将单击的字段发送到 Spring 控制器。然后我找到计算机的最佳移动并显示一个带有我和计算机移动的棋盘。问题是在第一次移动之后,单击另一个字段不会做任何事情,脚本只能工作一次。并且手动更改 URL 中的参数会更改我的移动位置,但不会再移动。

带棋盘的表单代码(“game.jsp”):

%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>

<html>
<head>
    <title>Game</title>
</head>
<body>
<script>
    function redirect(x, y) {
        window.location = "http://localhost:8080/taskNine/move?x=" + x + "&y=" + y;
    }
</script>
    <FORM NAME="tic" method="post" accept-charset=utf-8>
    <INPUT TYPE="button" NAME="sqr1" class="tictac" value="${board[0][0]}" onClick="if(document.tic.sqr1.value == '') {document.tic.sqr1.value = 'X';redirect(0, 0); }">
    <INPUT TYPE="button" NAME="sqr2" class="tictac" value="${board[0][1]}" onClick="if(document.tic.sqr2.value == '') {document.tic.sqr2.value = 'X';redirect(0, 1); }">
    <INPUT TYPE="button" NAME="sqr3" class="tictac" value="${board[0][2]}" onClick="if(document.tic.sqr3.value == '') {document.tic.sqr3.value = 'X';redirect(0, 2); }"> <br />
    <INPUT TYPE="button" NAME="sqr4" class="tictac" value="${board[1][0]}" onClick="if(document.tic.sqr4.value == '') {document.tic.sqr4.value = 'X';redirect(1, 0); }">
    <INPUT TYPE="button" NAME="sqr5" class="tictac" value="${board[1][1]}" onClick="if(document.tic.sqr5.value == '') {document.tic.sqr5.value = 'X';redirect(1, 1); }">
    <INPUT TYPE="button" NAME="sqr6" class="tictac" value="${board[1][2]}" onClick="if(document.tic.sqr6.value == '') {document.tic.sqr6.value = 'X';redirect(1, 2); }"> <br />
    <INPUT TYPE="button" NAME="sqr7" class="tictac" value="${board[2][0]}" onClick="if(document.tic.sqr7.value == '') {document.tic.sqr7.value = 'X';redirect(2, 0); }">
    <INPUT TYPE="button" NAME="sqr8" class="tictac" value="${board[2][1]}" onClick="if(document.tic.sqr8.value == '') {document.tic.sqr8.value = 'X';redirect(2, 1); }">
    <INPUT TYPE="button" NAME="sqr9" class="tictac" value="${board[2][2]}" onClick="if(document.tic.sqr9.value == '') {document.tic.sqr9.value = 'X';redirect(2, 2); }"> <br />
    </form>
</body>
</html>

这是一个控制器sn-p:

@RequestMapping(value = "/move", method = RequestMethod.GET)
public String fieldMove(@RequestParam("x") int x, @RequestParam("y") int y, ModelMap model) {

    gameService.move(x, y, model);
    return "game";
}

【问题讨论】:

  • 为什么需要window.location
  • 我将数据(参数)发送到控制器进行处理并返回计算机的移动。
  • 我认为您需要为此使用 Ajax!

标签: javascript html spring forms jsp


【解决方案1】:

RequestParam 的名称必须与输入的名称匹配:

@RequestMapping(value = "/move", method = RequestMethod.GET)
public String fieldMove(@RequestParam("sqr1") int sqr1, @RequestParam("sqr2") int sqr1, ..., ModelMap model) {

// Do something
return "game";

}

【讨论】:

  • 我会检查它,但为什么函数重定向只工作一次?这样会更容易。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多