我最初编写了一个由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
答案 0 :(得分:0)
我建议避免使用Scriplet,而是使用易于用户且不易出错的JSP Standard Tag Library和Expression 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>
答案 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)后执行重定向,以避免再次提交用户刷新浏览器或点击浏览器的后退箭头按钮。