最近在做毕业设计,一个B/S结构jsp程序.在我的一个页面a.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../importbao.jsp"%>
<%@ include file="mysession.jsp"%>
<%
int id =(null==request.getParameterValues("id")?1:(Integer.parseInt(request.getParameter("id"))));
String sql="select * from t";
sqlBean my = new sqlBean();
my.setConnection();
my.setQuerystatement(sql);
ResultSet Rst=my.getResult();
Rst.first();
Rst.previous();
%>
<script Language="JavaScript">
<!--
function check_input(frm)
{
...
}
//-->
</script>
该页面有一个表单
<tabale>
<form action="b.jsp?id=<%=id%>" name="frm" onsubmit="return check_input(this)" method="POST">
表单里面有如下控件:...
<select name="cmd"> //自动从数据库获取选项
<%
while(Rst.next())
{
out.print("<option value='");
out.print(Rst.getString("cname"));
out.print("'>");
out.print(Rst.getString("cname"));
out.print("</option>");
}
%>
</select>
...
<input type="checkbox" name="chkb1~chkb12" value="1">12个复选框,想实现选中为1,没选为0.
...
<input type="submit" name="Submit" value="授权">
<input type="reset" name="Submit2" value="重置">
</tabale>数据库中有一个t表,有一个cid(编号) int 4,cname(名称) varchar 20,还有crow1-crow12十二个tinyint型的字段,初始值我都给的0.在b.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../importbao.jsp"%>
<%@ include file="mysession.jsp"%>
<%try{
String cmd = new String(request.getParameter("cmd").getBytes("ISO8859_1"),"GBK");
int chkb1 = java.lang.Integer.parseInt(request.getParameter("chkb1"));
int chkb2 = java.lang.Integer.parseInt(request.getParameter("chkb2"));
...
int chkb12 = java.lang.Integer.parseInt(request.getParameter("chkb12"));
int id = Integer.parseInt(request.getParameter("id"));String sql="update t set crow1="+chkb1+"set"+ "crow2="+chkb2+",...crow12="+chkb12+" where cname='"+cmd+"'";
sqlBean myUpdate = new sqlBean();
myUpdate.setConnection();
myUpdate.setQuerystatement(sql);
myUpdate.updateRecord();
%>
<html>
<head></head>
<body><table>更新成功
<% out.print(cmd);
out.print(chkb1);
out.print(chkb2);
out.print(id);
%>
</table>
<%
}
catch(Exception e){
out.println("出错:"+e.getMessage());}%>
现在问题是:
问题一:如果我没有全部勾选12个复选框就会显示异常:"出错 null"(通过测试知道应该是没有选中的话其值为null,被捕获了异常),于是我在function check_input(frm)中加入:
if(frm.chkb1.checked=false)
frm.chkb1.value="1"或1
if(frm.chkb1.value == 1或"1")
{ alert("检测"); return (false);}
按提交测试时弹出了"检测"的对话框,我在if(frm.chkb1.checked=false)后加上{ alert("检测"); return (false);}注销掉后面的语句,在测试也弹出了同样的对话框,进一步证实了我的猜测,于是我第一复选框不选,用检测来复值"0或1",其他都勾选,可还是"显示出错 null"可见chkb1的值还是为空,可之前在a.jsp检测到赋予是给chkb1.value="1"或1时,弹出了对话框,chkb1="0"或0时也显示"出错 null",这个空值问题在这中方法下几乎无解了!急啊!问题二:我估计是id号这些东西没搞清,如果sql变为String sql="select * from t where cid="+id+"";是下拉菜单框不能弹出选项,框里只显示了第一项值比如"房子",变量值是通过request.getparameter()得到的.
如果在a.jsp全部勾选复选框后,提交后则显示"更新成功",并且显示了"汽车 111(分别代表选中的菜单项值,chkb1,chkb2,id三个值)",可是到数据库表中看,相应的那条记录并未被修改!这是怎么回事!真是屋漏偏逢连夜雨啊!眼见不久就要叫设计了,我的论文还没写,这只是系统中的一个小问题,还有好多要做的,心凉啊,请各为救急!
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../importbao.jsp"%>
<%@ include file="mysession.jsp"%>
<%
int id =(null==request.getParameterValues("id")?1:(Integer.parseInt(request.getParameter("id"))));
String sql="select * from t";
sqlBean my = new sqlBean();
my.setConnection();
my.setQuerystatement(sql);
ResultSet Rst=my.getResult();
Rst.first();
Rst.previous();
%>
<script Language="JavaScript">
<!--
function check_input(frm)
{
...
}
//-->
</script>
该页面有一个表单
<tabale>
<form action="b.jsp?id=<%=id%>" name="frm" onsubmit="return check_input(this)" method="POST">
表单里面有如下控件:...
<select name="cmd"> //自动从数据库获取选项
<%
while(Rst.next())
{
out.print("<option value='");
out.print(Rst.getString("cname"));
out.print("'>");
out.print(Rst.getString("cname"));
out.print("</option>");
}
%>
</select>
...
<input type="checkbox" name="chkb1~chkb12" value="1">12个复选框,想实现选中为1,没选为0.
...
<input type="submit" name="Submit" value="授权">
<input type="reset" name="Submit2" value="重置">
</tabale>数据库中有一个t表,有一个cid(编号) int 4,cname(名称) varchar 20,还有crow1-crow12十二个tinyint型的字段,初始值我都给的0.在b.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ include file="../importbao.jsp"%>
<%@ include file="mysession.jsp"%>
<%try{
String cmd = new String(request.getParameter("cmd").getBytes("ISO8859_1"),"GBK");
int chkb1 = java.lang.Integer.parseInt(request.getParameter("chkb1"));
int chkb2 = java.lang.Integer.parseInt(request.getParameter("chkb2"));
...
int chkb12 = java.lang.Integer.parseInt(request.getParameter("chkb12"));
int id = Integer.parseInt(request.getParameter("id"));String sql="update t set crow1="+chkb1+"set"+ "crow2="+chkb2+",...crow12="+chkb12+" where cname='"+cmd+"'";
sqlBean myUpdate = new sqlBean();
myUpdate.setConnection();
myUpdate.setQuerystatement(sql);
myUpdate.updateRecord();
%>
<html>
<head></head>
<body><table>更新成功
<% out.print(cmd);
out.print(chkb1);
out.print(chkb2);
out.print(id);
%>
</table>
<%
}
catch(Exception e){
out.println("出错:"+e.getMessage());}%>
现在问题是:
问题一:如果我没有全部勾选12个复选框就会显示异常:"出错 null"(通过测试知道应该是没有选中的话其值为null,被捕获了异常),于是我在function check_input(frm)中加入:
if(frm.chkb1.checked=false)
frm.chkb1.value="1"或1
if(frm.chkb1.value == 1或"1")
{ alert("检测"); return (false);}
按提交测试时弹出了"检测"的对话框,我在if(frm.chkb1.checked=false)后加上{ alert("检测"); return (false);}注销掉后面的语句,在测试也弹出了同样的对话框,进一步证实了我的猜测,于是我第一复选框不选,用检测来复值"0或1",其他都勾选,可还是"显示出错 null"可见chkb1的值还是为空,可之前在a.jsp检测到赋予是给chkb1.value="1"或1时,弹出了对话框,chkb1="0"或0时也显示"出错 null",这个空值问题在这中方法下几乎无解了!急啊!问题二:我估计是id号这些东西没搞清,如果sql变为String sql="select * from t where cid="+id+"";是下拉菜单框不能弹出选项,框里只显示了第一项值比如"房子",变量值是通过request.getparameter()得到的.
如果在a.jsp全部勾选复选框后,提交后则显示"更新成功",并且显示了"汽车 111(分别代表选中的菜单项值,chkb1,chkb2,id三个值)",可是到数据库表中看,相应的那条记录并未被修改!这是怎么回事!真是屋漏偏逢连夜雨啊!眼见不久就要叫设计了,我的论文还没写,这只是系统中的一个小问题,还有好多要做的,心凉啊,请各为救急!
解决方案 »
- JSF页面的跳转问题
- 关于frameset的刷新问题想用servlet实现
- jdbc连接sql2000问题
- 第一次用java作开发,写了一个servlet,但是输出来是消息,中文是问号?
- 高手帮忙,jasperreport报表在linux上中文乱码
- jsp代码长度是否有限制!
- 如何取得web應用程序所在目錄?
- 我没有javax.sql.DataSource请问怎么办呀,哪有下啊?
- Java程序里有import javax.servlet.http.*;编译总说包不存在
- 连结jsp和servlet问题???
- 急急急!! java应用程序中如何获取浏览器的代理信息! 高手进!! 在线等!!! 高手进!!!
- 急……有人调试过displaytag的代码吗?我怎么调试都不通过。也不知道是什么问题,jmesa也是,刚接触java不会调试。
你的function check_input(frm)在什么地方触发执行的,我建议你改一下这个地方,而是将判断放到这里
=========================================================================
int chkb1 = java.lang.Integer.parseInt(request.getParameter("chkb1"));
int chkb2 = java.lang.Integer.parseInt(request.getParameter("chkb2"));
...
int chkb12 = java.lang.Integer.parseInt(request.getParameter("chkb12"));
int id = Integer.parseInt(request.getParameter("id"));
============================================================================
或者你的submit 按钮这样写onclick = check_input(frm);,然后在函数function check_input(frm)中加上form.submit;问题二::
这个建议你将你组好的sql用控制台打一下,然后考到查询分析器中跑一下,看看sql的执行结果
这种写法只会给你添加麻烦,你也应该将取得的参数线类型转换一下,不是更安全吗?
String sql="select * from t";
是不是没加这一句?->where cid="+id+"";加了的话下拉选项不能从数据库获取,因为cid!=id?
update table_name set table_column1=value1,table_column2=value2……
空值和下拉框问题基本解决了,现在主要是不能更新,
<%String sql="update t set"+
"row1=1,row2=1,row3=1,row4=1,row5=1,row6=1"+
"row7=1,row8=1,row9=1,row10=1,row11=1,row12=1"+
"where cid=1";String sql="update t set"+
"row1="+chkb1+",row2="+chkb2+",row3="+chkb3+",row4="+chkb4+",row5="+chkb5+""+
"row6="+chkb6+,row7="+chkb7+",row8="+chkb8+",row9="+chkb9+",row10="+chkb10+""+
"row11="+chkb11+",row12="+chkb12+" where cid=1";
以上两种写发有错吗?谢谢了...sqlBean my = new sqlBean();
my.setConnection();
my.setQuerystatement(sql);
myU.updateRecord();
%>
不行,但添加删除可以.
把update t set row1=1,row2,row3=1,row4=1,row5=1,row6=1,row7=1,row8=1,row9=1,row10=1,row11=1,row12=1 where cid=1";还是不行,
以上两种写法有错吗?把update t set row1=1,row2,row3=1,row4=1,row5=1,row6=1,row7=1,row8=1,row9=1,row10=1,row11=1,row12=1 where cid=1";在查询分析器里执行可以更新.