2016-08-08 38 views
0

Ich habe eine JSP mit einem Brett zu spielen Tic Tac Toe. Und nach jedem Klick sende ich das angeklickte Feld an Spring Controller. Dann finde ich den besten Zug für einen Computer und zeige ein Brett mit Bewegungen von mir und von Computer. Das Problem ist, dass nach dem ersten Verschieben das Klicken auf ein anderes Feld nichts bewirkt, das Skript nur einmal funktioniert. Und das Ändern der Parameter in der URL ändert die Position meines Zuges manuell, macht aber keinen anderen mehr.Form senden Daten an den Controller einmal, dann funktioniert es nicht

-Code des Formulars mit einem Brett ("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> 

Und hier ist ein Controller-Schnipsel:

@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"; 
} 
+0

Warum brauchst du 'window.location'? –

+0

Ich sende die Daten (Parameter) an die Steuerung, um sie zu verarbeiten und die Bewegung des Computers zurückzugeben. – Tiberio

+0

Ich denke, dass Sie Ajax dafür verwenden müssen! –

Antwort

0

Der Name des RequestParam mit dem übereinstimmen muss Name des Eingangs:

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

// Do something 
return "game"; 

}

+0

Ich überprüfe es, aber warum funktioniert die Umleitung nur einmal? Es wäre einfacher so. – Tiberio