javascript - 如何将来自 servlet doGet 方法的请求转发到新的 html/jsp 页面
问题描述
我正在使用java servlet和html创建图表js(条形图)我有一个表单,它有两个日期字段和一个提交按钮,单击该按钮将我的操作转发到servlet,在那里我以json的形式和我的新html返回数据是具有 ajax 调用的 javascript,它正在调用 MYServlet 方法,但是当我从用户传递日期时,日期值取 null 并且不显示 html 页面中的任何内容我想在 html 页面上显示它们
下面是我的 html 表单
Below is my html Form
<form id="form Id" action="MyServlet"
method="get">
<div class="container">
<h4>Start Date:</h4>
<input type="text" id="startdate" name="fromdate" width="276"
placeholder="dd/mm/yyyy" required />
<h4>End Date:</h4>
<input type="text" id="enddate" name="todate" width="276"
placeholder="dd/mm/yyyy" required />
<div>
<br>
<button id="test" style="border-radius: 4px;" type="submit">Search</button>
</div>
</div>
</form>
**below is my servlet whic is getting data from db an converting it to hson object to display chart in new html**
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String fromdate=request.getParameter("fromdate");
String todate=request.getParameter("todate");
String str = null;
Gson gson = new Gson();
Map<Object, Object> map = null;
List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
int xVal ,yVal,zVal,aVal,bVal;
try {
con = DBConnection.createConnection();
statement = con.createStatement();
String sql="select sum(a.CASH) Cashamount,sum(a.CREDITCARD) Creditcardamount,sum(a.COUPONS) Couponamount,sum(a.CHEQUE) PAYTMamount,sum(a.CREDIT) Creditamount from syncbill a where a.CANCELLED<>'Y' and a.billdate between '"+fromdate+"' and '"+todate+"'";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
map = new HashMap<Object, Object>();
xVal = resultSet.getInt("Cashamount");
map.put("CashamountX", "Cashamount");
map.put("CashamountY", xVal);
yVal = resultSet.getInt("Creditcardamount");
map.put("CreditcardamountX", "Creditcardamount");
map.put("CreditcardamountY", yVal);
zVal = resultSet.getInt("Couponamount");
map.put("CouponamountX", "Couponamount");
map.put("CouponamountY", zVal);
aVal = resultSet.getInt("PAYTMamount");
map.put("PAYTMamountX", "PAYTMamount");
map.put("PAYTMamountY", aVal);
bVal = resultSet.getInt("Creditamount");
map.put("CreditamountX", "Creditamount");
map.put("CreditamountY", bVal);
list.add(map);
str = gson.toJson(list);
}
response.setContentType("application/json");
response.getWriter().write(str);
} catch (SQLException e) {
e.printStackTrace();
}
}
最后是我的图表 js html 文件,其中包含图表和 java 脚本
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<script>
$(document).ready(
function() {
$.ajax({
url : "MyServlet",
method : "GET",
success : function(data) {
var player = [];
var score = [];
for ( var i in data) {
player.push(data[i].CashamountX);
score.push(data[i].CashamountY);
player.push(data[i].CreditcardamountX);
score.push(data[i].CreditcardamountY);
player.push(data[i].CouponamountX);
score.push(data[i].CouponamountY);
player.push(data[i].PAYTMamountX);
score.push(data[i].PAYTMamountY);
player.push(data[i].CreditamountX);
score.push(data[i].CreditamountY);
}
var chartdata = {
labels : player,
datasets : [ {
label : 'Amount',
backgroundColor : [ '#6495ED', '#FFF8DC',
'#008B8B', '#DCDCDC', '#E6E6FA' ],
borderColor : 'black',
hoverBackgroundColor : '#B0C4DE',
hoverBorderColor : 'red',
data : score
} ]
};
var ctx = $("#mycanvas");
var barGraph = new Chart(ctx, {
type : 'bar',
data : chartdata
});
},
error : function(data) {
}
});
});
</script>
解决方案
您必须在表单的提交事件上调用 Ajax 函数。喜欢以下,
$(document).ready(function(){
$("#form_id").submit(function(event){ // don't put space in id or name in HTML
event.preventDefault(); // to stop form being submitted because it reloads the page.
$.ajax({
url : "MyServlet",
method : "GET",
data : {
fromdate : $("#startdate").val(),
todate : $("#enddate").val()
},
success : function(data) {
// your success function
}
});
});
});
在这里,您的表单、画布和脚本必须位于同一个文件中。您也可以action="MyServlet"
从表单中省略该属性。
编辑: 这是您程序的完整代码
<html>
<body>
<form id="form_id" method="get">
<div class="container">
<h4>Start Date:</h4>
<input type="text" id="startdate" name="fromdate" width="276" placeholder="dd/mm/yyyy" required />
<h4>End Date:</h4>
<input type="text" id="enddate" name="todate" width="276" placeholder="dd/mm/yyyy" required />
<div>
<br>
<button id="test" style="border-radius: 4px;" type="submit">Search</button>
</div>
</div>
</form>
<div id="chart-container">
<canvas id="mycanvas"></canvas>
</div>
<script>
$(document).ready(function(){
$("#form_id").submit(function(event){ // don't put space in id or name in HTML
event.preventDefault(); // to stop form being submitted because it reloads the page.
$.ajax({
url : "MyServlet",
method : "GET",
data : {
fromdate : $("#startdate").val(), // my bad it's val not value.
todate : $("#enddate").val()
},
success : function(data) {
$("#form_id").hide(); // this will hide the form.
var player = [];
var score = [];
for ( var i in data) {
player.push(data[i].CashamountX);
score.push(data[i].CashamountY);
player.push(data[i].CreditcardamountX);
score.push(data[i].CreditcardamountY);
player.push(data[i].CouponamountX);
score.push(data[i].CouponamountY);
player.push(data[i].PAYTMamountX);
score.push(data[i].PAYTMamountY);
player.push(data[i].CreditamountX);
score.push(data[i].CreditamountY);
}
var chartdata = {
labels : player,
datasets : [ {
label : 'Amount',
backgroundColor : [ '#6495ED', '#FFF8DC',
'#008B8B', '#DCDCDC', '#E6E6FA' ],
borderColor : 'black',
hoverBackgroundColor : '#B0C4DE',
hoverBorderColor : 'red',
data : score
}]
};
var ctx = $("#mycanvas");
var barGraph = new Chart(ctx, {
type : 'bar',
data : chartdata
});
}
});
});
});
</script>
</body>
</html>
推荐阅读
- jmeter - JMeter,如何在 HTTP Request Sampler 中加密整个 bodydata?
- angular - 材料角度全选复选框
- git - Using GitFlow in Azure DevOps (Does it mean multiple pipelines?)
- shell - 用于动态生成命令的 Shell 脚本
- java - 如何跨多个用户将不同的数据库与单个应用程序连接起来
- sql - 从 Redshift 中的 Connect by prior 开始
- python - _pickle.PicklingError: 不能腌制
: 没有找到 jinja2.utils.MissingType - excel - 我想根据单元格值查找成绩
- react-native - activeTintColor 在本机反应中不会更改选项卡图标的颜色
- css - 跨浏览替代文本填充以在图像上创建渐变透明文本