entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Presentar un select jsp 1 registro x celda

Quiero hacer una preesentacion en jsp de una select.
Pero quiero presentarla asi.
En cada Celda quiero un registro, que se vea en una tabla un total de x
registros (paguinacion incluida).

El codigo lo he encontrado en Php, pero no se como presentarlo en jsp

Pido ayuda por favor

//CODIGO DE PHP

<?PHP
$objConnect = mysql_connect("localhost","root","") or die(mysql_error());
$objDB = mysql_select_db("otaku");

$strSQL = "SELECT *FROM serie";

$objQuery = mysql_query($strSQL);
$Num_Rows = mysql_num_rows($objQuery);

$Per_Page = 8; // Per Page

@$Page = $_GET["Page"];
if(!@$_GET["Page"])
{
$Page=1;
}

$Prev_Page = $Page-1;
$Next_Page = $Page+1;

$Page_Start = (($Per_Page*$Page)-$Per_Page);
if($Num_Rows<=$Per_Page)
{
$Num_Pages =1;
}
else if(($Num_Rows % $Per_Page)==0)
{
$Num_Pages =($Num_Rows/$Per_Page) ;
}
else
{
$Num_Pages =($Num_Rows/$Per_Page)+1;
$Num_Pages = (int)$Num_Pages;
}

$strSQL .=" order by id_serie ASC LIMIT $Page_Start , $Per_Page";
$objQuery = mysql_query($strSQL);

echo"<table border=\"0\" width=\"50%\" align=\"center\" cellspacing=\"1\" cellpadding=\"1\"><tr>";
$intRows = 0;
while($objResult = mysql_fetch_array($objQuery))
{
echo "<td>"; 
$intRows++;
?>
<center><img with="150" height="150" src="..\<?=$objResult["imagen_principal"]; ?>"><br>
</br>
<span class="titulo"> <?=$objResult["Nombre"];?></span>

</br>
<span class="pequeño"><?=$objResult["Descripcion_p"];?></span><br >
</center>

<?php 
echo"<a href=\"eliminarserie.php?inombre='".$objResult['id_serie']."'\">ELIMINAR</a>

<a href=\"updateserie.php?inombre='".$objResult['id_serie']."'\">UPDATE</a> 
<a href=\"fichaserie.php?inombre='".$objResult['id_serie']."'\">FICHA</a>";?>
<?PHP
echo"</td>";
if(($intRows)%4==0)
{
echo"</tr>";
}
}
echo"</tr></table>";
?>

<br>
<span class="paguinas">Total 
<?= $Num_Rows;?> Record : <?=$Num_Pages;?> Page :</span>

<?PHP
if($Prev_Page)
{
echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page'><< Back</a> ";
}

for($i=1; $i<=$Num_Pages; $i++){
if($i != $Page)
{
echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i'>$i</a> ]";
}
else
{
echo "<b> $i </b>";
}
}
if($Page!=$Num_Pages)
{
echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page'>Next>></a> ";
}
?>

<?PHP
mysql_close($objConnect);
?> <br >
<a href="serie.php">INSERTAR NUEVO REGISTRO<br >
<a href="listar_galerias.php">Galerias
</a></p>
</body>
</html>

0voto

Sadelea comentado

Me gustaria que quedase asi
Cada registro de la base de datos
en una celda (En una tabla 3 columnas por 3 linea)

Eitado: movido a comentario. No es una respuesta a la pregunta.

2 Respuestas

2votos

Leonardo-Tadei Puntos227320

Dado que PHP y JSP son tecnologías bastante distintas, creo que es más difícil portar una porción de código de un lenguaje a otro que concebirla desde cero...

Así cómo buscaste en la web código PHP que muestre datos en una tabla y los pagine, podrías hacer una búsqueda similar para JSP y partir de ahí. Luego, si tenés dudas puntuales sobre ese código en JSP podrías abrir una neuva pregunta por acá para que podamos ayudarte.

Saludos cordiales

1voto

white Puntos75880

tu duda es acerca de la paginación? o de como mostrar los resultados desde la base de datos?

Aca te dejo un ejemplo:

Con una tabla de ejemplo, que va a ser "usuarios" con tres columnas (id, username, password):

+----+-----------+----------+
| id | username  | password |
+----+-----------+----------+
|  1 | jonathan  | 123456   |
|  2 | white     | 123456   |
|  3 | jhon doe  | 958372   |
|  4 | mary doe  | 129573   |
|  5 | white doe | 329583   |
|  6 | big doe   | 395873   |
|  7 | jane doe  | 132948   |
|  8 | bob doe   | 392583   |
|  9 | rick doe  | 194863   |
| 10 | carl doe  | 295853   |
| 11 | erick doe | 295863   |
| 12 | doe doe   | 194865   |
+----+-----------+----------+

el metodo ProcessRequest del controlador, debe tener el numero de pagina, el offset y la cantidad de resultados por pagina, este se encarga también de enviar al .jsp los datos.

private Connection connect = null;
private Statement statement = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
private int totalUsers;

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

    int page = 1,
        perPage = 3;

    if(request.getParameter("page") != null)
        page = Integer.parseInt(request.getParameter("page"));

    if( page < 1 )
        page = 1;

    List<User> data = getUsers(
        (page - 1) * perPage,
        perPage
    );

    request.setAttribute("usersList", data);
    request.setAttribute("totalPages", round(floor(totalUsers / perPage)));
    RequestDispatcher dispatcher = request.getRequestDispatcher("algun.jsp");
    dispatcher.forward(request, response);
}

en las lineas:

  • int page = 1, perPage = 3; definimos la pagina por default y el limite de resultados por pagina.
  • List<User> data = getUsers obtenemos los usuarios y definimos el offset y el limite para la consulta.
  • request.setAttribute("totalPages", round(floor(totalUsers / perPage))); enviamos al jsp la cantidad de páginas que existen redondeadas.

vas a necesitar obtener y guardar los datos en un ArrayList, puedes usar DAO, aca yo lo puse en un metodo del controlador.

private List<User> getUsers(int offset, int limit)
{
    List<User> users = new ArrayList<User>();

    try {
        // cargamos el driver
        Class.forName("com.mysql.jdbc.Driver");

        connect = DriverManager.getConnection(
            "jdbc:mysql://localhost/tubasededatos?" +
            "user=root&password=tupassword"
        );
        String sql = "select SQL_CALC_FOUND_ROWS * from usuarios " +
                     String.format("LIMIT %d, %d", offset, limit);

        statement = connect.createStatement();
        resultSet = statement.executeQuery(sql);

        while(resultSet.next())
        {
            User user;
            user = new User(
                resultSet.getInt("id"),
                resultSet.getString("username"),
                resultSet.getString("password")
            );

            users.add(user);
        }

        resultSet.close();

        resultSet = statement.executeQuery("SELECT FOUND_ROWS()");

        if(resultSet.next())
        {
            totalUsers = resultSet.getInt(1);
        }

        resultSet.close();

    } catch(Exception e) {
        System.out.println(e);
    } finally {
        try {
            connect.close();
        } catch (SQLException ex) {}
    }

    return users;
}

en las lineas:

  • String.format("LIMIT %d, %d", offset, limit); agregamos a la consulta el limite y el offset
  • user = new User( agregamos al ArrayList un nuevo usuarios con id, nombre y password.

la clase Users tienes sus setters correspondientes para poder obtenerlos en el .jsp

public class User { 
    private int id;
    private String name;
    private String password;

    public User(int id, String name, String password){
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public int getId()
    {
        return id;
    }

    public String getName()
    {
        return name;
    }

    public String getPassword()
    {
        return password;
    }
}

y para el jsp:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <table>
        <c:forEach items="${usersList}" var="user">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.password}</td>
            </tr>
        </c:forEach>
    </table>
    <div>
    <c:forEach var="i" begin="1" end="${totalPages}">
        <a href="?page=${i}">${i}</a> 
    </c:forEach>
    </div>

si deseas revizarlo con mas detalle te dejo los tres ficheros https://db.tt/RznIstGT

saludos!

0voto

Sadelea comentado

Gracias, pero no funciona ya que en el home esta en php (No me funcionan los archivos por lo de $) y no me lo le y ademas quisiera que fuera una tabla de 3x6 y en cada celda un registro gracias de todos modos.

0voto

white comentado

Solo para saber, a que te refieres con que el home esta en php y no te lo lee? estas trabajando con jsp o con php?

0voto

Sadelea comentado

jsp

Tenias razon es problema mio
Me sale el sigiente mensaje y eso que lo hago de glassfish

type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1 logs.

0voto

white comentado

@Sadalea, movi tu respuesta a comentario.

Sobre tu error, debes agregar el log entero por que lo que pusiste aqui no dice mucho sobre el error que tengas.
intenta buscar el log de glassfish.

saludos!

0voto

Sadelea comentado

White Porfa pasame el programa porque no se porque me da el siguiente mensaje

type Exception report

messageInternal Server Error

descriptionThe server encountered an internal error that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP

PWC6199: Generated servlet error:
source value 1.5 is obsolete and will be removed in a future release

PWC6199: Generated servlet error:
target value 1.5 is obsolete and will be removed in a future release

PWC6199: Generated servlet error:
To suppress warnings about obsolete options, use -Xlint:-options.

PWC6197: An error occurred at line: 25 in the jsp file: /home.jsp
PWC6199: Generated servlet error:
incompatible types: java.lang.Object cannot be converted to long

note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.1 logs.

0voto

Sadelea comentado

White se me ha olvidado lo mas importante En Preguntarte

En la base de datos que es cada cosa porque a lo mejor es por eso por lo que me estan dando problemas

Id es Int y el resto username varchar al igual pasword????????????????????????

Porque

    ***<%
        long totalPages = (long)request.getAttribute("totalPages");
        for(int i = 1; i <= totalPages; i++)
        {
            out.print(String.format(
                "<a href=\"?page=%d\">%d</a>",
                i, i
            ));
        }
    %> 
    <c:forEach var="i" begin="1" end="${totalPages}">
        <a href="?page=${i}">${i}</a> 
    </c:forEach>***

Esl lo que me da problemas

0voto

white comentado

@Sadelea, para hacer un comentario en mi respuesta a esta pregunta, da click en "Responder", no agregues respuestas al tema sin ser estas.

Aca te dejo el proyecto en netbeans para que puedas revizarlo. si tienes mas problemas te sugiero abrir un nuevo tema.

saludos!

https://db.tt/Sr4iHHGU

0voto

Sadelea comentado

Voy entendiendolo. Pero dime los 3 registros. Son ests:
Id_int
Los otros Varchar

0voto

Sadelea comentado

Me lo devuelve vacio. El problema lo tengo en el select

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta