3 votes

Convertir une liste en chaîne pour remplir une page web en JSP

J'ai des lignes d'un bean DAO récupérées dans une liste. Dans mon JSP, j'accède à la liste pour l'itérer et remplir ma page. Mon JSP ne peut pas accéder à la liste parce qu'il dit qu'elle doit être une chaîne lorsque j'exécute une requête.getParameter. Comment puis-je la convertir en String pour finalement remplir ma page ?

public List getAccessRequest()
{
    List accessRequesttList = new ArrayList());  // parse List to string
    //AccessRequest accessrequest = null;
    AccessRequest accessRequest = new AccessRequest());

    try
    {
        System.out.println("Try statement begins AccessRequestDAO");
        PreparedStatement accrqststmt = super.getConnection().prepareStatement(AccRqstSqlStmt);

        ResultSet resultSet = accrqststmt.executeQuery();

        while (resultSet.next())
        {
            // Creating an instant of job follows
            accessRequest = new Accessrequest();

            accessRequest.setJOB_NAME(resultSet.getString("job_name"));
            accessRequest.setRequest_ts(resultSet.getTime("request_ts"));
            accessRequestList.add(accessRequest);
            Iterator iterator = accessRequestList.iterator();

            while (iterator.hasNext())
            {
                accessRequest = (Accessrequest) iterator.next();
            }
        }
        return (accessRequestList);

Ma JSP ressemble à ce qui suit :

        <%
            List jobList = request.getParameter("acccessrequests"); // parse List to String

            Iterator iterator = jobList.iterator();
            while (iterator.hasNext())
            {
                accessRequest = (AccessRequest) iterator.next());
        %>
                <tr>
                <td><input type="checkbox" name="<%accessRequest.getApproval_ind(); %>"></td>
                <td><input type="text" id="jobname' name="accessRequests" value="job_name"></td>

2voto

BalusC Points 498232

HttpServletRequest#getParameter() renvoie un String et non un List . Le compilateur a donc raison.

Je ne sais pas comment vous avez fait pour régler le List en tant que paramètre de la requête, il n'existe pas de méthode de type HttpServletRequest#setParameter() . Donc vous interprétez probablement mal quelque chose. L'approche normale est de définir la liste comme requête attribut par HttpServletRequest#setAttribute() et y accéder dans JSP par EL (expression language) comme suit ${attributeName} . Vous pouvez aussi normalement itérer sur la liste en utilisant JSTL <c:forEach> étiquette.

En supposant que vous ayez défini la liste dans la portée de la requête en utilisant une Servlet comme suit...

request.setAttribute("list", list);

...voici un exemple de démarrage comment itérer sur la liste :

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...
<table>
    <c:forEach items="${list}" var="item">
        <tr>
            <td>${item.property1}</td>
            <td>${item.property2}</td>
            <td>${item.property3}</td>
        </tr>
    </c:forEach>
</table>

0voto

swdev Points 1072

Alhamdulillah, grâce à Dieu !

Cela m'a beaucoup aidé. J'essaie de construire mon propre cadre Web java. Avant de lire ce QA, je ne savais pas comment accéder à un objet (disons, une ligne de table) à partir d'un JSP. Je me contente de le rediriger, et de laisser le code de la base de données dans le JSP, généré par DreamWeaver. Maintenant je sais comment le faire. Par exemple, voici un BiroController, qui affiche les données de la table Biro :

 public void index() throws IOException, ServletException {
    List list=new ArrayList();
    list.add(BiroModel.create("1", "SDM"));
    list.add(BiroModel.create("2", "Keuangan"));
    request.setAttribute("list", list);        
    super.index();
}

tout d'abord, je remplis un tableau (par la suite, il proviendra de la table de la base de données). puis je fixe l'attribut de la requête, puis j'appelle la méthode d'indexation de la superclasse :

 public void index() throws IOException, ServletException {        
    RequestDispatcher rd = request.getRequestDispatcher(viewPage);
    if(rd!=null){
        rd.forward(request, response);
    }else{
       PrintWriter out = response.getWriter();
       out.print("can not dispatch to " + viewPage);
    }
    //OLD Code : response.sendRedirect(ServletUtil.getBaseUrl(request) + viewPage)
}

Et j'ai fait ce que vous m'avez demandé dans la JSP :

   <c:forEach items="${list}" var="item">
    <tr>
        <td>${item.idbiro}</td>
        <td>${item.biro}</td>
    </tr>
</c:forEach>

J'utilise Netbeans, je peux donc facilement choisir la bibliothèque JSTL dans la liste des bibliothèques disponibles.

Cela fonctionne de manière charmante :) tq

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X