You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC架构下点击HTML文本获取游戏详情的页面空白问题排查

问题排查与修复方案

首先看你遇到的问题:点击游戏标题跳转后success.jsp空白,核心问题出在JSP页面的代码逻辑错误上,我帮你梳理下:

主要问题点

  1. 错误使用<c:forEach>遍历单个对象:
    你的GameIdController中把单个Game对象存入了request.setAttribute("Game", game);,但在JSP里却用<c:forEach items="${requestScope.Game}" var="game">来遍历——<c:forEach>是用来遍历集合(比如List、数组)的,单个对象无法被遍历,所以这段代码完全不会执行,自然看不到内容。

  2. 无效的语法错误:
    页面里的$game = ${requestScope.Game}是错误的JSP语法,既不是Java代码块也不是EL表达式,会被直接当作文本输出,但因为前面的forEach没执行,加上这个错误代码也不会正确渲染内容。

  3. 场景未区分导致的冗余渲染:
    当前页面同时处理搜索结果列表和单个游戏详情两种场景,但没有做互斥判断——当打开单个游戏详情时,搜索结果的<c:forEach items="${requestScope.games}"...>也会执行,但此时requestScope.games是不存在的,虽然不会报错,但属于冗余逻辑,也可能影响页面结构。

修正后的success.jsp代码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Search results</title>
</head>
<body>
    <%-- 搜索结果列表场景 --%>
    <c:if test="${not empty requestScope.games}">
        <fieldset id="IGDB">
            <legend> IGDB search for <c:out value="${param.searchQuery}" /> </legend>
            <c:forEach items="${requestScope.games}" var="game">
                <article name="gameArticle" id="gameArticle"></article>
                <a href="GameIdController?id=${game.id}"><c:out value="${game.name}" /></a>
                <br />
            </c:forEach>
        </fieldset>
    </c:if>

    <%-- 单个游戏详情场景 --%>
    <c:if test="${requestScope.Item=='gameID' and not empty requestScope.Game}">
        <fieldset id="GameDetails">
            <legend>Game Details</legend>
            <article name="gameByIDArticle" id="gameByIDArticle">
                <h2><c:out value="${Game.name}" /></h2>
                <%-- 这里可以添加更多游戏详情字段,比如描述、发行日期等,根据你的Game类属性来 --%>
                <%-- 示例:<p>Release Date: <c:out value="${Game.releaseDate}" /></p> --%>
            </article>
        </fieldset>
    </c:if>
</body>
</html>

修改说明

  • 用<c:if>做了场景区分:只有当requestScope.games存在时,才渲染搜索结果列表;只有当Item=='gameID'且Game对象不为空时,才渲染单个游戏详情。
  • 去掉了错误的<c:forEach>遍历单个Game对象的代码,直接通过EL表达式${Game.name}获取单个对象的属性。
  • 移除了无效的$game = ${requestScope.Game}代码,避免语法错误。
  • 给游戏详情部分添加了基础的结构,你可以根据Game类的实际属性扩展更多展示内容。

另外,建议你在GameIdController的if分支里补上rd.forward(request, response);——当前代码里只有else分支有forward,if分支遗漏会导致跳转失败:

if(game!=null) {
    rd = request.getRequestDispatcher("/success.jsp");
    request.setAttribute("Game", game);
    request.setAttribute("Item", "gameID");
    rd.forward(request, response); // 补上这行
} else {
    // ... else分支代码
}

内容的提问来源于stack exchange,提问作者rayo329

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:49:46