javascript - 一个页面的超链接向后台发请求的问题?
本文介绍了javascript - 一个页面的超链接向后台发请求的问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
先来前jsp页面的代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<!-- 包含公共的JSP代码片段 -->
<title>无线点餐平台</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="${pageContext.request.contextPath }/pos/style/js/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/pos/style/js/page_common.js"></script>
<link href="${pageContext.request.contextPath }/pos/style/css/common_style_blue.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/pos/style/css/index_1.css" />
<script type="text/javascript">
$(function(){
$("#isorder").click(function(){
var val = this.innerHTML;
if(val=="预定") {
var url = this.href + "&tableStatus=1";
alert(url);
$.post(url, function(data){
$("#orderStatus").html("预定");
$("#orderDate").html(data);
$("#isorder").text('退订');
});
} else {
var url = this.href + "&tableStatus=2";
alert(url);
$.post(url, function() {
$("#orderStatus").html("空闲");
$("#orderDate").html("");
$("#isorder").text('预定');
});
}
return false;
});
})
</script>
</head>
<body>
<!-- 页面标题 -->
<div id="TitleArea">
<div id="TitleArea_Head"></div>
<div id="TitleArea_Title">
<div id="TitleArea_Title_Content">
<img border="0" width="13" height="13" src="${pageContext.request.contextPath }/pos/style/images/title_arrow.gif"/> 餐桌列表
</div>
</div>
<div id="TitleArea_End"></div>
</div>
<!-- 过滤条件 -->
<div id="QueryArea">
<form action="/wirelessplatform/board.html" method="get">
<input type="hidden" name="method" value="search">
<input type="text" name="keyword" title="请输入餐桌名称">
<input type="submit" value="搜索">
</form>
</div>
<!-- 主内容区域(数据列表或表单显示) -->
<div id="MainArea">
<table class="MainArea_Content" cellspacing="0" cellpadding="0">
<!-- 表头-->
<thead>
<tr align="center" valign="middle" id="TableTitle">
<td>编号</td>
<td>桌名</td>
<td>状态</td>
<td>预定时间</td>
<td>操作</td>
</tr>
</thead>
<!--显示数据列表 -->
<tbody id="TableData">
<c:choose>
<c:when test="${not empty requestScope.tables }">
<c:forEach items="${tables }" var="table">
<tr class="TableDetail1">
<td align="center">${table.id } </td>
<td align="center">${table.tableName } </td>
<td align="center" id="orderStatus">${table.tableStatus == 1 ? "预定":"空闲" }</td>
<td align="center" id="orderDate">
<fmt:formatDate value="${table.orderDate }" pattern="yyyy-MM-dd HH:mm:ss"/>
</td>
<td>
<a href="${pageContext.request.contextPath }/dinnertable?method=updateDinnerTable&id=${table.id }" class="FunctionButton" id="isorder">${table.tableStatus == 1 ? "退订":"预定" }</a>
<a href="${pageContext.request.contextPath }/dinnertable?method=deleteDinnerTable&id=${table.id }" onClick="return delConfirm();" class="FunctionButton">删除</a>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td align="center" colspan="4">没有餐桌信息!请添加后查询。。。。</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
<!-- 其他功能超链接 -->
<div id="TableTail" align="center">
<div class="FunctionButton"><a href="${pageContext.request.contextPath }/pos/saveBoard.jsp">添加</a></div>
</div>
</div>
</body>
</html>
再来后台处理
public Object updateDinnerTable(HttpServletRequest request, HttpServletResponse response) {
Object url = null;
String id = request.getParameter("id");
String tableStatus = request.getParameter("tableStatus");
System.out.println(tableStatus);
//构建对象
DinnerTable dinnerTable = new DinnerTable();
dinnerTable.setId(Integer.parseInt(id));
dinnerTable.setTableStatus(Integer.parseInt(tableStatus));
Date orderDate = (Integer.parseInt(tableStatus) == 2) ? null:new Date();
dinnerTable.setOrderDate(orderDate);
dinnerTableService.update(dinnerTable);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = df.format(orderDate);
try {
PrintWriter writer = response.getWriter();
writer.write(date);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("id:" +id + "; tableStatus:" + tableStatus);
return url;
}
来运行结果
然后添加一条数据 再对新添加的数据进行操作就报错了
null
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.uiyllong.servlet.BaseServlet.service(BaseServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:542)
at java.lang.Integer.parseInt(Integer.java:615)
at com.uiyllong.servlet.DinnerTableServlet.updateDinnerTable(DinnerTableServlet.java:77)
... 27 more
请大神看看哪里有问题
解决方案
根据题主问题的评论,明白题主问题之所在了,你的html是这样的:
<a href="${pageContext.request.contextPath }/dinnertable?method=updateDinnerTable&id=${table.id }" class="FunctionButton" id="isorder">${table.tableStatus == 1 ? "退订":"预定" }</a>
当有多条数据时,这条也会重复多次。可是你是这样选择的:
$("#isorder").click(function(){
重复ID,jquery只会选第一条,CSS可以容错当成class用。你明白问题所在了吧
这篇关于javascript - 一个页面的超链接向后台发请求的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文