html - JSP 显示错误(旧)值

标签 html jsp servlets javabeans server-side

以下问题:

我使用 Servlet 作为 Controller ,使用 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>

Servlet:

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:( session )

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 JavaBean 出现问题,它没有为 session 返回正确的游戏或其他内容。

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

最佳答案

需要在请求中设置game属性。

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"/>

关于html - JSP 显示错误(旧)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084926/

相关文章:

mysql - jsp中如何保持新段落的存在?

java - 如何解决XML转换问题?

JSP 重定向 : Session Loss Issues

java - 404 未找到 : Something wrong with access to a servlet deployed on Tomcat

servlets - doPost super 导致 - HTTP 状态 405

html - 如何使用 materialize css 将带有图标的搜索框添加到导航栏?

javascript - Intel XDK - 打开个性化键盘

html - Bootstrap,全屏网站 : scrollbar on a div

css - 参数化和重用 HTML5 中定义的自定义 SVG 过滤器?

java - 包 javax.servlet.http 不存在