es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar atributos de servlet en varias páginas HTML

Estoy aprendiendo desarrollo web por mi cuenta y construyendo un sitio web para buscar restaurantes en tu área utilizando el YelpAPI. He conseguido que la búsqueda funcione, pero quiero que los usuarios puedan hacer clic en uno de los resultados y abrir una página expanded.jsp donde se muestren detalles adicionales sobre ese restaurante. El problema es que no tengo idea de cómo seguir usando los datos que obtengo de Yelp en mi servlet en múltiples páginas. A continuación se muestra un resumen de mi código:

Tengo un servlet que está utilizando el YelpAPI para obtener una lista de 10 restaurantes. Luego establece esta lista como un atributo y se reenvía a la página de resultados.

List<Restaurant> restaurants = getRestaurants(name, location);
request.setAttribute("data", restaurants);
request.getRequestDispatcher("/results.jsp").forward(request, response);

Luego (dentro de results.jsp) uso JSTL para crear la página de resultados. ¡Esto funciona muy bien!

<c:forEach var="restaurant" items="${data}">
<a href="expanded.jsp"><img src="${restaurant.image_url}"></a>
<p>${restaurant.name}</p>
<p>${restaurant.location}</p>
<a href="${restaurant.url}">Reseñas</a>
</c:forEach>

Cuando el usuario hace clic en una de las imágenes (anidadas en la etiqueta de anclaje), obviamente se redirige a expanded.jsp, pero todos los atributos se han borrado a null y no parece haber manera de acceder a ninguno de estos datos para un restaurante específico. No estoy buscando que alguien me codifique, pero me encantaría tener una idea de qué enfoque debería tomar para poder hacer que el usuario haga clic en una imagen de restaurante y continuar en una página con varios detalles más sobre ese restaurante.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en HTML, JSP, Servlets, JSTL y YelpAPI, mi recomendación sería pasar los detalles relevantes del restaurante (como el ID o el nombre) como un parámetro en la URL cuando el usuario hace clic en un restaurante en particular de los resultados de búsqueda. De esta manera, cuando se redirige al usuario a la página expanded.jsp, el servlet puede utilizar este parámetro para recuperar los detalles específicos del restaurante de nuevo desde el YelpAPI y mostrarlos en la página.

    Para lograr esto, se podría modificar la etiqueta de anchor en la página results.jsp para incluir los detalles del restaurante en la URL. Por ejemplo:

    <a href="expanded.jsp?restaurantId=${restaurant.id}"><img src="${restaurant.image_url}"></a>
    

    Luego, en el servlet para la página expanded.jsp, se puede recuperar este parámetro de la solicitud y utilizarlo para obtener los detalles relevantes del restaurante desde el YelpAPI. Por ejemplo:

    String restaurantId = request.getParameter("restaurantId");
    Restaurant restaurant = getRestaurantDetails(restaurantId);
    request.setAttribute("restaurant", restaurant);
    request.getRequestDispatcher("/expanded.jsp").forward(request, response);
    

    Finalmente, en la página expanded.jsp, se puede utilizar JSTL para mostrar los detalles específicos del restaurante que se recuperaron utilizando el parámetro pasado. Por ejemplo:

    <h1>${restaurant.name}</h1>
    ${restaurant.location}
    
    ${restaurant.phone}
    

    ¡Espero que esto ayude! Avísame si tienes alguna otra pregunta.

Comments are closed.