【问题标题】:Populating JSP table with Servlet and using parameters within the table使用 Servlet 填充 JSP 表并使用表中的参数
【发布时间】:2014-09-16 07:13:24
【问题描述】:

我最初编写了一个由 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

【问题讨论】:

  • 你说你正在使用 Struts。首先是 Struts1 还是 Struts2 ?它们是真正不同的框架,只是共享名称。而且从控制器向JSP传递对象的方式也不完全一样。
  • 抱歉,更新了问题。我正在使用 Struts 1

标签: java jsp servlets


【解决方案1】:

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

Map.Entry 包含 getKey()getValue() 方法来访问 Map Entry 中的键和值。

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

示例代码:

小服务程序:

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

【讨论】:

  • 谢谢,我会研究 JSTL。至于我关于生成表格外的“提交”按钮的其他问题,我是否应该在按钮和表格周围包裹一个表格?
  • 是的,你可以包装它。在表格标签之外添加表单标签。
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-03-25
    • 2012-08-21
    • 1970-01-01
    • 2016-12-14
    • 2012-10-18
    • 2013-05-07
    相关资源
    最近更新 更多