使用Servlet填充JSP表并使用表中的参数

时间:2014-07-24 16:00:12

标签: java jsp servlets

我最初编写了一个由Struts 1.1连接的.jsp,用scriplets从数据库中提取一些数据:

<%  Map<String, myObject> map = MyClass.returnMap();

    for(Map.Entry<String, myObject> entry : map.entrySet()) {
        myObject element = entry.getValue();
        out.println("<tr>");
        out.println("<td><input type=\"checkbox\" name=\"objects[]\" value=\"" + entry.getKey() + "\"/>" + entry.getKey() + "</td>");
        out.println("<td>" + element.property1() + "</td>");
        out.println("<td>" + element.property2() + "</td>");
     }
%>

所以我最终得到一个带有复选框,对象名称和两个元素属性作为列的表,并为returnMap()返回的Map中的每个条目添加一行。

现在,我希望能够检查生成的表中的多个复选框,然后单击按钮将所有已选中复选框的列表发送到servlet,以根据所选的复选框执行某些服务器端计算。

一个问题是所述“提交”按钮在表格之外,在单独的div中(用于固定位置标题)。我可以在包含按钮和表格的整个div周围打一个表单吗?

我从Web开发开始,已经完成了一些关于Servlet的教程,并且我理解了基本概念。我已经看到在jsp中使用scriptlet作为业务逻辑通常是不好的做法,所以我正在考虑通过我的Servlet生成表。但是,我也希望能够在另一个Servlet方法中使用Servlet生成的元素(如果有意义的话)。

我的思维过程是:

1).JSP通过Struts加载 2).JSP从Servlet接收表格 3)单击提交按钮时,将已选中复选框列表发送回Servlet
4)Servlet使用复选框列表并执行一些业务逻辑
5).JSP使用更新的表格刷新

这是一个可行的过程吗?或者有更好的方法吗?

我必须访问.jsp(通过Struts),而不是大多数教程使用的servlet url

2 个答案:

答案 0 :(得分:0)

我建议避免使用Scriplet,而是使用易于用户且不易出错的JSP Standard Tag LibraryExpression language

Map.Entry包含getKey()getValue()方法,可以从地图条目中访问关键字和值。

只需在Servlet中将返回值设置为请求属性,然后就可以使用JSTL在JSP中访问它。

示例代码:

的Servlet

request.setAttribute("map",MyClass.returnMap());
// forward the request to the jsp

JSP:

<c:forEach var="entry" items="${map}">
    <c:out value="${entry.key}"/>:<core:out value="${entry.value}"/>
</c:forEach>

read more...

答案 1 :(得分:0)

Struts1现在已经过时了,Apache基金会正式不再支持它。来自Apache Struts site Apache Struts项目团队想通知您Struts 1.x Web框架已经达到其使用寿命并且不再受到官方支持。因此,如果你开始使用它,你应该考虑使用另一个框架,如Struts2或Spring MVC。

但资源仍然存在,您应该使用Struts 1 User Guide

因此,您应该有一个Action来显示JSP。在JSP中,表单必须包含所有输入字段**和*提交字段(可能跨越多个div)。您应该有另一个Action来处理输入,而ActionForm可以在渲染时在第一个Action和JSP之间传输数据,并在提交时将输入值提供给第二个时间。

不要忘记Struts1带有一个taglib,它可以帮助你避免尽可能多的来自JSP的scriptlet,但恕我直言,你应该尽可能使用JSTL而不是Struts特定的标签,当他们做同样的事情时:迁移将是如果您以后想要使用其他框架,则会更容易。

通常,使用输入值调用业务方法来执行智能事务是第二个操作的工作,建议在提交(POST)后执行重定向,以避免再次提交用户刷新浏览器或点击浏览器的后退箭头按钮。