将List转换为String以在JSP中填充网页

时间:2010-09-20 04:11:48

标签: java jsp

我在List中检索了DAO bean行。在我的JSP中,我正在访问List以迭代直到填充我的页面。我的JSP无法访问List,因为它表示在执行request.getParameter时它必须是String。我如何将其转换为String最终填充我的页面?

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);

我的JSP如下所示:

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

2 个答案:

答案 0 :(得分:2)

HttpServletRequest#getParameter()返回String,而不是List。所以编译器是对的。

我不确定您是如何将List设置为请求参数的,没有像HttpServletRequest#setParameter()这样的方法。所以你可能会误解一些东西。通常的方法是将列表设置为HttpServletRequest#setAttribute()的请求属性,并通过EL(表达式语言)在JSP中访问它,如${attributeName}。您通常也使用JSTL <c:forEach>标记迭代列表。

假设您已使用如下的Servlet在请求范围中设置列表...

request.setAttribute("list", list);

...这是一个如何迭代列表的启动示例:

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

答案 1 :(得分:0)

Alhamdulillah,感谢上帝!

这对我很有帮助。我尝试构建自己的java Web框架。 在阅读本QA之前,我不知道如何从JSP访问对象(例如,表行)。 我只是重定向它,并将数据库代码留在JSP中,由DreamWeaver生成。现在我知道该怎么做了。例如,这是一个BiroController,它显示来自Biro Table的数据:

 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();
}

首先,我填充一个数组(随后,这将来自数据库表)。然后设置request属性,然后调用超类索引方法:

 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)
}

而且,我按照你在JSP中的指示做了:

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

我使用Netbeans,因此我可以从可用库列表中轻松选择JSTL库

它迷人地工作.. :) tq