如果现在我有一个隐藏文本框一个文本域:
目前要做的是把文本框和文本域里面的值提交到后台,同时还要后台处理完后返回一些参数来告诉我有没有提交成功。
Jsp页面最开始要添加的代码:
我们可以选择使用原本的ajax 也可以使用jquery中提供的方法。
在文本域里面输入包含“%”的内容:
[img]http://dl.iteye.com/upload/picture/pic/71752/eac3c155-81db-3195-88fb-78ccf51fe22b.jpg[/img]
后台在action中直接调用在service中的方法,如下:
如果在文本域里面你输入的值只有“%“或者“测试内容%”,就会出现以下异常:
输入的值只有“测试内容%测试内容”或者“%测试内容”,就会出现以下异常:
[color=red][b]其实主要是因为上面的提交方式是把值放在URL中传递到后台,即[color=black]get[/color]的方式进行提交,%好像是特殊的字符,于是就出现这样的异常,解决办法。[/b][/color]
1.改为form提交,post提交方式:
2. 修改提交事件:
首先你应该要知道jquery的validate验证机制,然后你看到下面的方法你就明白是怎么回事了:
上面的解决办法利用了jquery中validate的一种提交方式的回调机制,但是没有使用验证,如果你需要加上你的验证,可以去查询jquery.validate的文章。
<input type="hidden" id="id" value="1">
<textarea rows="5" cols="3" id="content"></textarea>
<input type="button" value="确定" id="save" >
目前要做的是把文本框和文本域里面的值提交到后台,同时还要后台处理完后返回一些参数来告诉我有没有提交成功。
Jsp页面最开始要添加的代码:
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<c:set var="contextPath" value="<%=basePath%>" />
我们可以选择使用原本的ajax 也可以使用jquery中提供的方法。
$("#save").click(function(){
var id = $.trim($("#id").val());
var content = $.trim($("#content").val());
$.ajax({
type: "POST",
url: "${ctx}/testAction.do?method=save",
data: "id="+id+"&content="+content,
success: function(msg){
if(msg==’success’){
alert();
}
}
});
});
在文本域里面输入包含“%”的内容:
[img]http://dl.iteye.com/upload/picture/pic/71752/eac3c155-81db-3195-88fb-78ccf51fe22b.jpg[/img]
后台在action中直接调用在service中的方法,如下:
public void save(Integer id, String content) {
DetailDO scdo = testDao.getDetailDOById(id);
if(content!=null&&!"".equals(content)){
scdo.setContent(content);
}else{
scdo.setContent(null);
}
}
如果在文本域里面你输入的值只有“%“或者“测试内容%”,就会出现以下异常:
2010-9-16 15:32:35 org.apache.tomcat.util.http.Parameters processParameters
警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: EOF
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:80)
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:46)
at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411)
at ... ...
输入的值只有“测试内容%测试内容”或者“%测试内容”,就会出现以下异常:
2010-9-16 15:36:00 org.apache.tomcat.util.http.Parameters processParameters
警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: isHexDigit
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:85)
at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:46)
at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411)
at ... ...
[color=red][b]其实主要是因为上面的提交方式是把值放在URL中传递到后台,即[color=black]get[/color]的方式进行提交,%好像是特殊的字符,于是就出现这样的异常,解决办法。[/b][/color]
1.改为form提交,post提交方式:
<form [b][color=red]method="post"[/color] [/b]id="testForm" name="testForm">
<input type="hidden" id="id" value="1">
<textarea rows="5" cols="3" id="content"></textarea>
<input type="button" value="确定" id="save" >
</form>
2. 修改提交事件:
首先你应该要知道jquery的validate验证机制,然后你看到下面的方法你就明白是怎么回事了:
$("#testForm").validate({
submitHandler:function(form) {
//...//提交之前要执行的操作可以放在这里
jQuery(form).ajaxSubmit(function(msg){
//以ajax方式提交表单(一定要写,不然表单不会被提交)
这里你就可以做你想做的事情了... ...
});
//...//提交表单完成所要执行的操作可以放在这里
}
});
//保存
$("#save").click(function(){
var act = "${ctx}/testAction.do?method=save";
$("#testForm").attr("action",act);
$("#testForm").submit();
});
上面的解决办法利用了jquery中validate的一种提交方式的回调机制,但是没有使用验证,如果你需要加上你的验证,可以去查询jquery.validate的文章。