2

以下问题:

我使用 Servlet 作为控制器,使用 JSB 作为模型,使用 Java Bean 作为信息。这里的代码:

HTML/JSP:

<table summary="Diese Tabelle zeigt Informationen zum aktuellen Spiel">
                            <jsp:useBean id="game" class="model.Spiel" scope="session"/>
                            <tr><th id="leaderLabel" class="label">F&uuml;hrender</th><td id="leader" class="data"><%= game.getLeader() %></td></tr>
                            <tr><th id="roundLabel" class="label">Runde</th><td id="round" class="data"><%= game.getRound() %></td></tr>
                            <tr><th id="timeLabel" class="label">Zeit</th><td id="time" class="data"><%= game.getTime() %></td></tr>
                            <tr><th id="computerScoreLabel" class="label">W&uuml;rfelergebnis <em>Super C</em></th><td id="computerScore" class="data"><%= game.getComputerScore() %></td></tr>
                        </table>  

HTML Servlet 调用:

<a id="dice" href="GameServlet?action=wurfeln" tabindex="4">
                            <img id="diceImage" src="img/wuerfel1.png" alt="W&uuml;rfel mit einer Eins" />
                        </a>

小服务程序:

if(action.equals("wurfeln")){
            // Get right game for the session
            Spiel game;
            HttpSession session = request.getSession(true);
            if(sessions.getGame(session)==null) {
                sessions.newSessions(session);
                game = sessions.getGame(session);
            }
            else {
                game = sessions.getGame(session);
            }

            // Runt methods on game
            game.setSpielerScore(); //Spieler würfelt
            game.setComputerScore(); //Computer würfelt

            // Load new JSB
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/table.jsp");
            dispatcher.forward(request, response);
        }

Java Bean:(游戏)

package model;
import java.util.Random;

public class Spiel {
    private int Runde;
    private String Zeit;
    private int Spieler_Feld;
    private int Spieler_Wurfelergebnis;
    private String Spieler_Name;
    private int Computer_Feld;
    private int Computer_Wurfelergebnis;
    private String Computer_Name;
    private Random x;

    public Spiel() {
        this.Runde         = 1;
        this.Zeit          = "00:00";
        this.Spieler_Feld  = 1;
        this.Computer_Feld = 1;
        this.Spieler_Name  = "Super Mario";
        this.Computer_Name = "Super C";
        this.x             = new Random();
        this.Spieler_Wurfelergebnis  = 0;
        this.Computer_Wurfelergebnis = 0;
    }

    public void setRound(int round) {
        this.Runde = round;
    }

    public void setTime(String time) {
        this.Zeit = time;
    }

    public String getTime() {
        return this.Zeit;
    }

    public int getRound() {
        return this.Runde;
    }

    public void newRound() {
        this.Runde += 1;
    }

    public String getLeader() {
        if(this.Spieler_Feld > this.Computer_Feld) {
            return this.Spieler_Name;
        }
        else if(this.Spieler_Feld < this.Computer_Feld){
            return this.Computer_Name;
        }
        else {
            return "beide";
        }
    }

    public void setSpielerScore() {
        //Spieler würfelt
        //this.Spieler_Wurfelergebnis = this.x.nextInt(3)+1;
        this.Spieler_Wurfelergebnis = 3;
    }

    public void setComputerScore() {
        //Computer würfelt
        //this.Computer_Wurfelergebnis = this.x.nextInt(3)+1;
        this.Computer_Wurfelergebnis = 2;
    }

    public int getSpielerScore() {
        return this.Spieler_Wurfelergebnis;
    }

    public int getComputerScore() {
        return this.Computer_Wurfelergebnis;
    }
}

Java Bean:(会话)

package model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Sessions {
    HashMap<HttpSession, Spiel> sessions = new HashMap<HttpSession, Spiel>();

    public void newSessions(HttpSession s) {
        if(!sessions.containsKey(s)) {
            Spiel newgame = new Spiel();
            sessions.put(s, newgame);
        }
    }

    public Spiel getGame(HttpSession s) {
        Spiel spiel = sessions.get(s);
        if (spiel != null) {
            return spiel;
        }
        else {
            return null;
        }
    }
}

所以我遇到的问题是,随着 Servlet(请求调度程序 ....)中 JSP 的新负载,它实际上应该在新的 JSP 中显示更新的值。由于game.setSpielerScore()它会更改一些变量,但它会继续显示使用构造函数调用设置的值。

我有三个可能的想法为什么会发生这种情况:

1) JSP 代码有问题,可能没有收集到正确对象的值。

2) Session JavaBeans 有问题,它没有为会话返回正确的游戏或其他东西。

3)它没有正确更新游戏对象的变量

4

1 回答 1

2

The game attribute needs to be set in the request.

if(action.equals("wurfeln")){
            // Get right game for the session
            Spiel game;
            HttpSession session = request.getSession(true);
            if(sessions.getGame(session)==null) {
                sessions.newSessions(session);
                game = sessions.getGame(session);
            }
            else {
                game = sessions.getGame(session);
            }

            // Runt methods on game
            game.setSpielerScore(); //Spieler würfelt
            game.setComputerScore(); //Computer würfelt

            request.setAttribute("game", game);//set the game in the request.

            // Load new JSB
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/table.jsp");
            dispatcher.forward(request, response);
        }

JSP

<jsp:useBean id="game" class="model.Spiel" scope="request"/>
于 2013-04-18T14:09:34.313 回答