Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Obtener datos de un ArrayList

Hola, soy nuevo aquí. Antes de nada comentar que estoy empezando con java y me cuesta bastante.

Os expongo el problema:

Debo hacer una aplicación web que recoja unos datos (.jsp) los pase a un servlet, este a un beans para encapsular los objetos en uno solo y la salida de los datos la muestre otra página .jsp

Primer .jsp >

<form method="get" action="/WebApplication4/NewServlet">
...
<c:forEach var="i" begin="0" end="2" step="1">
<tr>
<td></td>
<td></td>
</tr>
</c:forEach>

Servlet.java > (Aquí es donde tengo el problema y no se como tomar los datos, porque he probado de diferentes formas)

@WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"})
public class NewServlet extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");

int counter = 0;
Enumeration Data = request.getParameterNames();
Map<String, String[]> calcul = new HashMap<String, String[]>();
ArrayList<String> myList = new ArrayList();

while (Data.hasMoreElements()) {
String Param = (String)Data.nextElement();
myList.add(Param);
calcul.put(Param, request.getParameterValues(Param));
counter++;
}
List<Map<String, String>> List = new ArrayList<Map<String, String>>();

for(int i=0; i<calcul.get(myList.get(0)).length; i++) {
Map<String, String> calcul2 = new HashMap<String, String>();
for(int j=0; j<counter; j++) {
calcul2.put(myList.get(j), calcul.get(myList.get(j))[i].toString());
}
List.add(calcul2);
}
/*AQUI ES DONDE DEBO EXTRAER LOS DATOS DEL ARRAY PARA PASARLOS AL BEANS*/

Beans servlet = new Beans();
servlet.setNombre(nombre);
servlet.setBonus(bonus);
/*Se llama bonus porque debo hacer una operación con el objeto "multiplier" */

request.setAttribute("Beans", servlet);
request.getRequestDispatcher("bonus.jsp").forward(request, response);
}

Beans.java >

package servlet;

public class Beans {

private String nombre, bonus;

public String getNombre(){
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getBonus(){
return this.bonus;
}
public void setBonus(String bonus) {
this.bonus = bonus;
}
}

Bonus.jsp >

...
<c:forEach items="${List}" var="calcul">
<div class="calcul">
<div class="nombreCalcul">
<c:out value="${calcul['nombre']}" />
</div>
<div class="bonusCalcul">
<c:out value="${calcul['bonus']}" />
</div>
</div>
</c:forEach>

Espero que puedan ayudarme, gracias.

diciembre 10, 2016 | Registered Commenteri33naxo

Hola, ¿porque no pones el codigo completo? Me gustaria saber si vuestro isp os cobra por palabra, no entiendo, ya que se empieza a poner el código, se pone todo. Veo jsp incompletos,¿ donde están los campos del formulario? ¿que tipos de campos son? Supongo que al poner el código, lo haces con la intención de que alguien lo pruebe, pero si esta incompleto es imposible.

Sinceramente, no entiendo bien que intentas hacer, quizá si pones todo el código pueda verlo. Bueno un saludo

diciembre 13, 2016 | Registered Commenterloderain

Tienes razón, lo hice pensando que podría entenderse pero lo pongo completo a continuación:

Index.jsp >

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bonus Calculation</title>
</head>

<h1>Bonus Calculation</h1>
<form method="get" action="/WebApplication4/NewServlet">
<table>
<tr>
<th>Numero SSN</th>
<th>Multiple</th>
</tr>
<c:forEach var="i" begin="0" end="2" step="1">
<tr>
<td></td>
<td></td>
</tr>
</c:forEach>
</table>
Enviar

Reiniciar
</form>

</html>

NewServlet.java >

package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"})
public class NewServlet extends HttpServlet {

public double getBonus(String multiplier) {
return Double.parseDouble(multiplier) * 100.0;
}

/**
* Processes requests for both HTTP
* GET and
* POST methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");

int counter = 0;
Enumeration Data = request.getParameterNames();
Map<String, String[]> calcul = new HashMap<String, String[]>();
ArrayList<String> myList = new ArrayList();

while (Data.hasMoreElements()) {
String Param = (String)Data.nextElement();
myList.add(Param);
calcul.put(Param, request.getParameterValues(Param));
counter++;
}
List<Map<String, String>> List = new ArrayList<Map<String, String>>();

for(int i=0; i<calcul.get(myList.get(0)).length; i++) {
Map<String, String> calcul2 = new HashMap<String, String>();
for(int j=0; j<counter; j++) {
calcul2.put(myList.get(j), calcul.get(myList.get(j))[i].toString());
}
List.add(calcul2);
}

/*
Aquí es donde debo sacar los datos del ArrayList para pasarlos al Beans y al .jsp
*/

Beans servlet = new Beans();
servlet.setNombre(nombre);
servlet.setBonus(bonus);

request.setAttribute("Beans", servlet);
request.getRequestDispatcher("bonus.jsp").forward(request, response);
}

Beans.java >

package servlet;

public class Beans {

private String nombre, bonus;

public String getNombre(){
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getBonus(){
return this.bonus;
}
public void setBonus(String bonus) {
this.bonus = bonus;
}
}

Bonus.jsp >

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>

<h1>Bonus Calculation:</h1>
<c:forEach items="${List}" var="calcul">
<div class="calcul">
<div class="nombreCalcul">
<c:out value="${calcul['nombre']}" />
</div>
<div class="bonusCalcul">
<c:out value="${calcul['bonus']}" />
</div>
</div>
</c:forEach>

</html>

Un saludo y gracias!

diciembre 13, 2016 | Unregistered Commenteri33naxo

Sigo teniendo problemas en la publicación, la web me toma el código como una edición del post y cambia cosas. No se si al menos se ve mejor lo que pretendo, aún así, lo explico:

Introduzco unos datos en una tabla (.jsp) que son 'nombre' y 'multiplier'. NewServlet.java los va guardando en un ArrayList y necesito extraerlos para pasarlos al Beans.java y Bonus,jsp

diciembre 13, 2016 | Unregistered Commenteri33naxo

a ver pon el código entre los tags "<"code">""<"/code">" sin las comillas, pones el código entre esos tags y así debería publicarlo todo sin que el foro procese los tags de tu código, Si ves que no puedes, mándame correo a loderain1@gmail.com con el proyecto y le echo un ojo a ver que pasa.

diciembre 13, 2016 | Registered Commenterloderain

Index.jsp


<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Bonus Calculation</title>
</head>

<h1>Bonus Calculation</h1>
<form method="get" action="/WebApplication4/NewServlet">
<table>
<tr>
<th>Numero SSN</th>
<th>Multiple</th>
</tr>
<c:forEach var="i" begin="0" end="2" step="1">
<tr>
<td></td>
<td></td>
</tr>
</c:forEach>
</table>
Envoyer

Réinitialiser
</form>

</html>

NewServlet.java


package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"})
public class NewServlet extends HttpServlet {

public double getBonus(String multiplier) {
return Double.parseDouble(multiplier) * 100.0;
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");

int counter = 0;
Enumeration Data = request.getParameterNames();
Map<String, String[]> calcul = new HashMap<String, String[]>();
ArrayList<String> myList = new ArrayList();

while (Data.hasMoreElements()) {
String Param = (String)Data.nextElement();
myList.add(Param);
calcul.put(Param, request.getParameterValues(Param));
counter++;
}
List<Map<String, String>> List = new ArrayList<Map<String, String>>();

for(int i=0; i<calcul.get(myList.get(0)).length; i++) {
Map<String, String> calcul2 = new HashMap<String, String>();
for(int j=0; j<counter; j++) {
calcul2.put(myList.get(j), calcul.get(myList.get(j))[i].toString());
}
List.add(calcul2);
}

Beans servlet = new Beans();
servlet.setNombre(nombre);
servlet.setBonus(bonus);

request.setAttribute("Beans", servlet);
request.getRequestDispatcher("bonus.jsp").forward(request, response);
}
}

Beans


package servlet;

public class Beans {

private String nombre, bonus;

public String getNombre(){
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getBonus(){
return this.bonus;
}
public void setBonus(String bonus) {
this.bonus = bonus;
}
}

Bonus.jsp


<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>

<h1>Bonus Calculation:</h1>
<c:forEach items="${List}" var="calcul">
<div class="calcul">
<div class="nombreCalcul">
<c:out value="${calcul['nombre']}" />
</div>
<div class="bonusCalcul">
<c:out value="${calcul['bonus']}" />
</div>
</div>
</c:forEach>

</html>

La nueva variable bonus que aparece es la variable multiplier multiplicada por 100, simplemente hacer esa operación para que tenga un valor nuevo.

diciembre 13, 2016 | Unregistered Commenteri33naxo

Me temo que el problema persiste :S
Te lo paso por correo.

Gracias!

diciembre 13, 2016 | Unregistered Commenteri33naxo