Populate drop down list with jsp, struts2 & postgresql
Populate drop down list with jsp, struts2 & postgresql
My Struts2 web应用程序的索引页面有两个按钮,如下所示。
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<link href="assets/css/lib/bootstrap.min.css" rel="stylesheet">
<link href="assets/css/lib/bootstrap-responsive.min.css"
rel="stylesheet">
<link href="css/report.css" rel="stylesheet">
<title></title>
<script type="text/javascript">
function listReports() {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "myReportAction.action", true);
xhttp.send();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
window.location = '/ReportBuilder/myreports.jsp';
}
}
}
</script>
</head>
<body>
<div id="form-wrapper"
style="text-align: center; vertical-align: middle">
<form action="reporttype.jsp" method="post" class="row-centered">
<button type="submit" class="btn btn-primary">Create Report</button>
</form>
<div>
<button id="myReports" class='btn btn-info' onclick="listReports()">My
Reports</button>
</div>
</div>
单击我的报告按钮后,它将调用myReportAction。这是我的struts.xml文件。
<action name="myReportAction" class="net.java.com.reports.MyreportsAction"
method="execute">
<result name="success">/myreports.jsp</result>
<result name="error">/error.jsp</result>
</action>
MyreportsAction.java类。
package net.java.com.reports;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class MyreportsAction extends ActionSupport implements
ServletRequestAware {
private List<String> myreports;
HttpServletRequest servletRequest = ServletActionContext.getRequest();
HttpServletResponse servletResponse = ServletActionContext.getResponse();
@Override
public String execute() throws Exception {
myreports = new ArrayList<String>();
Connection connection = null;
Statement stmt = null;
ResultSet rs = null;
System.out.println("-------- PostgreSQL "
+ "JDBC Connection Testing ------------");
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
return ERROR;
}
System.out.println("PostgreSQL JDBC Driver Registered!");
System.out.println("Database connection established!");
try {
connection = DriverManager.getConnection(
SelectAction.getDatabase(), SelectAction.getUser(),
SelectAction.getPassword());
if (connection != null) {
System.out.println("Database connection established!");
stmt = connection.createStatement();
// creating Query String
String query = "SELECT report_id'n" + "FROM reports'n";
// Executing query
rs = stmt.executeQuery(query);
while (rs.next()) {
myreports.add(rs.getString("report_id"));
}
System.out.println(myreports);
connection.close();
return SUCCESS;
} else {
System.out.println("Failed to make connection!");
return ERROR;
}
} catch (SQLException e) {
System.out.println("Connection Failed!");
e.printStackTrace();
return ERROR;
}
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
}
public List<String> getMyreports() {
return myreports;
}
public void setMyreports(List<String> myreports) {
this.myreports = myreports;
}
public HttpServletResponse getServletResponse() {
return servletResponse;
}
public void setServletResponse(HttpServletResponse servletResponse) {
this.servletResponse = servletResponse;
}
public HttpServletRequest getServletRequest() {
return servletRequest;
}
}
myreports.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link href="assets/css/lib/bootstrap.min.css" rel="stylesheet">
<link href="assets/css/lib/bootstrap-responsive.min.css"
rel="stylesheet">
<link href="css/report.css" rel="stylesheet">
<title></title>
</head>
<body>
<div id="form-wrapper"
style="text-align: center; vertical-align: middle">
<div class="container">
<select id="myreports" name="myreports" >
<s:iterator value="myreports">
<option value="<s:property />"><s:property /></option>
</s:iterator>
</select>
</div>
</div>
</body>
</html>
单击我的报告按钮后,我需要转到myreports,jsp页面,它应该填充myreports下拉列表。以上是我尝试过的尝试。它重定向到myreports.jsp页面,但下拉列表id为空。
欢迎提出任何建议。
谢谢
出现了很多问题。
最重要的一点是,您必须始终调用一个操作,然后呈现JSP,而不应该直接调用JSP。相反,您正在呼叫
window.location = '/ReportBuilder/myreports.jsp';
它将在不传递操作的情况下打开JSP。因此,无需将任何操作数据传递给它并填充您的选择。
实际上,动作数据只在xhttp.onreadystatechange = function() {
函数中可用,然后您创建了另一个请求并丢失了它
您需要执行类似window.location = "/some.action";
的操作,其中some.action将加载select所需的数据并转发到您的JSP,然后它就可以工作了,但由于您之前已经调用了填充select所需要的操作,因此需要重新连接整个操作。
这就是错误,但在此之后,这里有一些建议:
使用
<s:iterator>
填充选择?最好使用<s:select />
标记。我建议您在阅读这个问题的同时阅读这个答案中所描述的所有内容,以了解为什么以及如何更好地塑造应用程序的层,而不是将业务逻辑放在实际上是表象控制器的操作中。对于那些没有被公司规则强制明确避免使用jQuery的初学者来说,使用香草Javascript而不是jQuery是个坏主意。如果你能用,就用吧。
看看Struts2 jQuery插件,它将允许您在不知情的情况下使用jQuery,只需使用Struts2标记。
使用HTML5 DTD。它是向后兼容的,而且比4.01要好得多,这会在不同的浏览器上产生奇怪的怪癖。
CSS比页内
<style>
块更好,后者比内联样式更好。是否更改页面以填充选择?在同一页面上填充一个select不是更好吗?
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- jQuery工具验证器自定义效果-添加&消除影响
- Twitter引导程序Typeahead-Id&标签
- AngularJS&JSON-从Previous&下一个对象
- 什么是&&在没有if的行中的变量之间
- 关于引入外部javascript文件的问题&css通过https
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 使用ajax的服务器端分页&jQuery
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如何使用dropzone&vueJs
- 如何准确执行加载脚本&退出弹出窗口
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- Solr查询以按日期月份获取数据&年
- 显示&作为&在jsp中使用angularjs而不使用ng-bind-html
- 将数组对象传递到struts2中的操作类