使用MVC在html中单击文本时获取有关对象的更多信息

rayo329:

因此,我正在制作一个小型的Web应用程序以获取有关游戏的信息,我创建了一个searchBar来请求对API的搜索,然后获得前10个与搜索标题最相似的游戏。但是我只显示标题。

这是一个搜索示例

游戏具有很多属性,其中之一就是ID,它使我能够使用控制器获取游戏的所有信息。

现在,该应用程序的工作方式如下:
1:搜索游戏的标题
2.控制器为我提供ID列表,并使用ID获得有关游戏的其余信息,但仅显示标题。

现在,我要执行的操作:3.
单击标题时,使用控制器,并从ID请求(再次不确定是否可以使用之前的游戏对象)该游戏的所有信息并显示它。

控制器工作正常,但HTML出现问题。

这是搜索的控制器:

...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   

    String query = request.getParameter("searchQuery");
    RequestDispatcher rd = null;  

    log.log(Level.FINE, "Searching for games that contain " + query);
    GameResource game = new GameResource();
    GameSearch[] gameResults = null;
    gameResults = game.getGameSearch(query);

    //System.out.println(Arrays.toString(gameResults));
    List<Game> listaBusqueda = new ArrayList<Game>();

    if (gameResults.length!=0){
        rd = request.getRequestDispatcher("/success.jsp");
        for (GameSearch g : gameResults) {
            listaBusqueda.add(game.getGame(g.getId().toString()));
        }
        request.setAttribute("games", listaBusqueda);
    } else {
        log.log(Level.SEVERE, "Game object: " + gameResults);
        rd = request.getRequestDispatcher("/error.jsp");
    }
    rd.forward(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}
...

这是使用ID给我游戏的控制器

...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String gameId = request.getParameter("id");
    GameResource resource = new GameResource();
    RequestDispatcher rd = null;
    log.log(Level.FINE, "Retrieving game");

    Game game = resource.getGame(gameId);

    if(game!=null) {
        rd = request.getRequestDispatcher("/success.jsp");
        request.setAttribute("Game", game);
        request.setAttribute("Item", "gameID");
    } else {
        log.log(Level.SEVERE, "Cannot retrieve game: ");
        rd = request.getRequestDispatcher("/error.jsp");
        rd.forward(request, response);
    }
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
  }

}

它们都可以工作,在最后一个中,正确创建了对象并获得了ID。

现在,这是success.jsp的html,这是问题所在:

<%@ 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>


<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 test="${requestScope.Item=='gameID' }">
<c:forEach items="${requestScope.Game}" var="game">
        <article name="gameArticle" id="gameArticle"></article>
        <c:out value="${game.name}" />

        <br />
    </c:forEach>
    $game = ${requestScope.Game}
    <c:out value="${game.name}"/>

</c:if>

<article name = "gameByIDArticle" id = "gameByIDArticle">

</article>

</body>
</html>

当我单击标题时,我将重定向到一个空白网页(http:// localhost:8090 / GameIdController?id = IdOfTheGame),您可以看到ID包含在URL中,但它完全是空白的,应该包含标题再次如我的代码中所述。

我还将包括我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <description></description>
    <display-name>GameSearchController</display-name>
    <servlet-name>GameSearchController</servlet-name>
    <servlet-class>aiss.controller.GameSearchController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GameSearchController</servlet-name>
    <url-pattern>/GameSearchController</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>GamePopularityController</display-name>
    <servlet-name>GamePopularityController</servlet-name>
    <servlet-class>aiss.controller.GamePopularityController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GamePopularityController</servlet-name>
    <url-pattern>/GamePopularityController</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/api</param-value>
  </context-param>
  <servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet- 


 class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet- 
class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>aiss.api.GameApplication</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>
  <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error.jsp</location>
  </error-page>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>GameIdController</display-name>
    <servlet-name>GameIdController</servlet-name>
    <servlet-class>aiss.controller.GameIdController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GameIdController</servlet-name>
    <url-pattern>/GameIdController</url-pattern>
  </servlet-mapping>
 </web-app>
乔纳森·拉利伯特(Jonathan Laliberte):

好吧,我想我明白为什么您看到空白页。一切都按预期工作,问题似乎出在此:

if(game!=null) {
    rd = request.getRequestDispatcher("/success.jsp");
    request.setAttribute("Game", game);
    request.setAttribute("Item", "gameID");
} else {
    log.log(Level.SEVERE, "Cannot retrieve game: ");
    rd = request.getRequestDispatcher("/error.jsp");
    rd.forward(request, response);
}

您看到空白页的原因是因为您的游戏变量不为null。而且在if else块的第一部分中没有前向语句。

if(game!=null) {
    rd = request.getRequestDispatcher("/success.jsp");
    request.setAttribute("Game", game);
    request.setAttribute("Item", "gameID");
    rd.forward(request, response); // missing this!
} else {
    log.log(Level.SEVERE, "Cannot retrieve game: ");
    rd = request.getRequestDispatcher("/error.jsp");
    rd.forward(request, response);
}

编辑:为了回应评论中的其他问题,我认为forEach会因此而出现问题:

<c:forEach items="${requestScope.Game}" var="game">

更改为此:

<c:forEach items="${Game}" var="game">

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当按下列表组中的项目时,我想显示有关单击项目的更多详细信息

获取有关图像中对象的信息

获取有关特定对象的信息

如何获取有关异常错误的更多信息?

Cucumber CLI - 获取有关执行的更多信息

Python-如何获取有关SyntaxError的更多信息?

如何获取有关python错误的更多信息?

如何获取有关套接字文件的更多信息?

获取有关“权限被拒绝”的更多信息

如何获取有关“功能”标志警告的更多信息?

获取有关Gradle构建错误的更多信息

如何获取有关此设备的更多信息?

如何在Android Studio中获取有关“等待目标设备上线”的更多信息?

在Visual Studio(即时窗口)中获取有关已处理异常的更多详细信息

KendallTau:尝试在 stats.py 中获取有关 weightedtau() 的更多详细信息

如何获取有关Confluent中Zookeeper状态的更多信息

如何在MacOS Catalina中获取有关旧版系统扩展的更多信息?

auth0 在 Android 中获取有关 userProfile 的更多信息

通过单击特定图像获取有关特定对象的信息

有关Winform中Alpha混合模式的更多信息

单击获取有关JS构造按钮的信息

如何从单击事件中获取有关自动生成的按钮的特定信息

有关动态编程的更多信息

将文件上传到Azure CDN时如何获取有关400 Bad Request Error的更多信息

获取有关数据库的信息时出错?在带有Oracle的EclipseLink中

获取有关MySQL中过程的调用者对象的详细信息

如何使用自省功能让Python告诉我更多有关PIL ImagingCore对象的信息?

有什么方法可以获取有关GCM故障的更多详细信息?

从 freertos 中的数据获取有关发送任务的信息