情景描述:
利用Struts2 + jQuery 实现ajax时候,如何获取返回值的信息来正确的提示用户。例如给某个电影打分rating,每个用户只能对一个电影打一次分数,如果打第二次的时候就提示用户"已经打过分了"。
1.js代码:
function ratingMovieClick(userId,num,movieId){
if (userId == 0) {
alert("You have to be logged in to rating !")
return;
}else{
var url = "../RatingMovie.action";
var params = {
userId : userId,
num : num,
movieId : movieId
};
jQuery.post(url, params, callbackFun, 'json');
}
}
function callbackFun(data) {
alert(data);
}
2.配置文件:注意这里的<param name="root">result</param>这句将请求处理返回的结果带回到页面中。
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="Struts2_AJAX" extends="json-default">
<action name="RatingMovie" class="com.action.RatingAction" method="addRatingMovie">
<result type="json">
<param name="root">result</param>
</result>
</action>
</package>
</struts>
3.java代码:这里定义的result就是在配置文件里面定义的,这2个要一致。
public class RatingAction extends AbstractAction{
private double avg_rating ;
private int count;
private String result;
private static String CALL_BACK_1 = "You have ratinged !";
private static String CALL_BACK_2 = "Thanks for rating !";
private IRatingService ratingService;
private IMovieService movieService;
/**
* check the records.
* @param obj1
* @param obj2
* @return
*/
public int checkRelatedTableRecord(long obj1, long obj2){
if(ratingService == null){
count = getRatingService().getRecordRating(obj1, obj2);
}else{
count = ratingService.getRecordRating(obj1, obj2);
}
return count;
}
public String addRatingMovie(){
int record = this.checkRelatedTableRecord(userId, movieId);
if(record > 0){
this.result = CALL_BACK_1;
return "success";
}else{
Related related = new Related();
related.setType(Related.TYPE_RATING_MOVIE);
related.setObj1(userId);
related.setObj2(movieId);
related.setDegree(num);
related.setCreated(new Date());
related.setModified(new Date());
ratingService.addRating(related);
avg_rating = ratingService.getAvgRating(Related.TYPE_RATING_MOVIE, movieId);
Movie movie = movieService.getMovieById(movieId);
movie.setRating(new Float(avg_rating));
movieService.updateMovie(movie);
this.result = CALL_BACK_2;
return "success";
}
}
public void setRatingService(IRatingService ratingService) {
this.ratingService = ratingService;
}
public void setMovieService(IMovieService movieService) {
this.movieService = movieService;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
这样当record > 0时,数据库里面已经有记录的时候,就this.result = CALL_BACK_1;return "success"; 这里的result就会赋值成"You have ratinged !",这样在回调函数中就可以拿到这个字符串了。这里的返回值只能是"success",我试过好几个都会报错!
下面是某个参考某论坛上的信息:http://www.iteye.com/topic/560638
一、准备一个JSP页面用于提交ajax请求,这里我使用了JQuery的$.getJSON(url,params,function callback(data))函数提交ajax请求到指定url,并且携带参数params,最后用一个回调函数callback处理请求返回结果data;
二、一个处理请求的Action类,并在struts.xml文件中做相应配置:写一个action类处理ajax请求数据,并将返回结果封装成一个JSONObject对象返回给请求页面。同时在struts.xml中配置对应action,指明其返回类型为json并使其package的extends为json-default,并将要返回请求页面的数据放在名为root的param中,如<param name="root">result</param>。
三、接受请求返回结果:使用JS的eval方法将返回结果data转换成JSON对象,并处理返回结果。
$.getJSON(url,params,function callback(data){
// convert to json object
var user = eval("("+data+")");//
$("#result").each(function(){
$(this).html('welcome ,' + user.name);
});
});
}
public String login() throws Exception {
Map map = new HashMap();
map.put("name", user.getLogName());
map.put("password",user.getPassword());
JSONObject obj = JSONObject.fromObject(map);
result = obj.toString();
return SUCCESS;
}
分享到:
相关推荐
struts2+json+jquery实现ajax数据的存取
Struts2+jQuery+ajax+mySql实现省市二级联动
struts2+jquery+ajax实现验证功能
struts2+jquery+ajax实现了文件的异步上传,的MyEclipse编写的简单项目
struts2 + jquery +ajax 登录验证
这圣思园张老师的一个上课演示文件,讲的是struts2+jquery+Ajax实现异步交互的简单例子。
MVC Struts2框架搭建,Jquery Ajax异步数据交互,内涵需要的jar包及ppt讲解
struts2+jquery+ajax实现头像上传切割图片,稍事改动即可用于具体项目
Struts2+Hibernate+Spring+jQuery 联合使用
Struts2+JQuery+JSON实现AJAX
struts2+jQuery+json实现AJAX.zip
1、将struts2的json插件加入web工程的lib,jsonplugin的下载地址:http://code.google.com/p/jsonplugin/downloads/list
Java中:struts2+jQuery+ajax调用(引用) 代码,解析,源码,demo,实例,分析
struts2+ajax+jquery异步批量上传超大文件,单文件最大支持2G,一次文件数量,文件大小都可设置。简单明了。绝对可用,稍微懂点的就可以修改为自己所用。你值得拥有! 我会分享给大家更多更好的东西,希望支持!
自学两天ibatis后自己做的struts2+spring+ibatis+jquery ajax的登录注册
Struts2+jQuery ajax的一个商品小系统Struts2+jQuery ajax的一个商品小系统
Struts2+JSON+JQuery实现简单的验证; 需要 JDK1.6+ tomcat5.0+ 支持~~~ 不说废话,上源码!!
NULL 博文链接:https://mamaoyuan625.iteye.com/blog/462719
一个简单的demo,实现了struts2+jquery执行ajax异步请求并返回json类型数据的实例,代码中附有注释,简单易懂。 基于eclipse开发,导入到eclipse即可运行。