日期:2014-05-16 浏览次数:20639 次
情景描述:
???? 利用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 {?? ?????????? ??