博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众号开发(二)
阅读量:5735 次
发布时间:2019-06-18

本文共 7779 字,大约阅读时间需要 25 分钟。

今天把之前的知识整合一下 来做一个简单公众号购物界面的用户评价界面,供大家学习

整体思路:我们一般看到的淘宝用户评价界面基本需要---->用户头像,用户昵称,和评论内容,评论时间等几个基本字段

.如何获取用户的基本信息我们在上一节说过了,获取用户的评论内容我们现在根据现实购物订单的用户评价来用数据库模拟.这样我们就可以完成一个用户评价界面的模块功能了.

首先我们先创建实体类Evaluate

img_938760481480f65f5dbb091edae36e6a.png
@Getter@Setter@ToStringpublic class Evaluate {//保证一个用户可以有很多条评价private Long id;//用户的openIDprivate String openID;//评价时间private Date evaluateTime;//评价内容private String  content;//昵称private String  nickname;//头像private String  headimgurl;}

接着创建EvaluateMapper获取所有的用户评价

public interface EvaluateMapper {List
listAll();}

创建接口(略)和实现类

@Servicepublic class EvaluateServiceImpl implements IEvaluateService {@Autowiredprivate EvaluateMapper mapper;@Overridepublic List
listAll() { return mapper.listAll();}}

创建EvaluateMapper.xml


我们先创建evaluate.jsp再创建控制类

<%@ page language="java" contentType="text/html;charset=utf-8"%>
Insert title here
//集成下拉刷新
下拉刷新
释放刷新
正在刷新
嘿嘿!

小结在这里我们使用的是 jQuery WeUI 因为他给们提供了很多控件,根据官网提供的开发文档我们选择合适的控件,选择好控件后,我们需要向控件传入数据使得我们的界面有数据显示给用户看

img_de079b3d69bb1b97b9147ec6297ad991.png
选择WEIUI控件

接着我们可以通过EL表达式来获取需要的值(先说jsp界面)

首先要引入EL表达式的头文件
然后通过EL表达式从共享作用域里获取需要的值

img_39b73d93c98e1218fa175d5c1b42bc03.png

创建EvaluateController

@Controllerpublic class EvaluateController {@Autowiredprivate IEvaluateService service;@RequestMapping("/evaluate")public String evaluatemanager(Model model) {    List
listAll = service.listAll(); List
lists = new ArrayList<>(); //遍历所有订单 如果订单有评论就获取获取用户信息 for (Evaluate li : listAll) { String content = li.getContent(); String openid = li.getOpenID(); //调用接口获取用户详细信息 String result = HttpUtil.get(WeixinUtil.GET_USERINFO_URL.replace("ACCESS_TOKEN", WeixinUtil.getAccessToken()).replace("OPENID", openid)); //转成json对象 JSONObject json = JSON.parseObject(result); String nickname = (String) json.get("nickname"); String headimgurl = (String) json.get("headimgurl"); li.setNickname(nickname); li.setHeadimgurl(headimgurl); lists.add(li); System.out.println("-----" + result); } model.addAttribute("lists",lists); //跳转到evaluate.jsp界面(用户评价界面) return "evaluate";}}

小结:这里我们想把界面需要的数据传给jsp界面首先要知道怎么讲数据传递过去,这里就要知道spring的几种传值方式,我就随便找了一篇博客如果需要可以花一分钟看看,然后我们需要获取过滤数据库的用户订单信息,我们需要的是用户评价的信息,所以有两种方式获取1.通过sql条件排除没有评价的订单信息,2.获取所有订单,遍历过滤没有评论内容的订单.接着我们通过查询数据库获取到订单信息这是过滤后的每一个订单都是有用户评论的,然后调用接口获取用户详细信息,订单信息里有用户的openID,我们遍历每一个订单获取用户的openID,发送请求,

String result = HttpUtil.get(WeixinUtil.GET_USERINFO_URL.replace("ACCESS_TOKEN", WeixinUtil.getAccessToken()).replace("OPENID", openid));
这是我们需要返回的结果转成json对象,
JSONObject json = JSON.parseObject(result);
然后取值再赋值,我们希望把需要的属性全部封装到对象里这时我们就必须在实现类里添加用户头像headimgurl和昵称nickname两个字段,
String nickname = (String) json.get("nickname");
String headimgurl = (String) json.get("headimgurl");
li.setNickname(nickname);
li.setHeadimgurl(headimgurl);
lists.add(li);
然后就可以通过Spring的传值方式把集合共享到作用域里,在jsp界面再通过EL表达式获取即可
model.addAttribute("lists",lists);

这里用到HttpUtil工具类

public class HttpUtil {/** * 发送get请求 * @throws Exception */public static String get(String url) {    String result = "";    InputStream in = null;    try {        // 打开和URL之间的连接        HttpURLConnection conn = (HttpURLConnection) new URL(url)                .openConnection();        // 设置通用的请求属性        conn.setRequestProperty("accept", "*/*");        conn.setRequestProperty("connection", "Keep-Alive");        conn.setRequestProperty("Content-Type", "application/json");        conn.setRequestProperty("Accept", "application/json");        conn.setRequestMethod("GET");        // 建立实际的连接        conn.connect();        // 定义输入流来读取URL的响应        in = conn.getInputStream();        result = StreamUtils.copyToString(in, Charset.forName("utf-8"));    } catch (Exception e) {        e.printStackTrace();    } finally {        if (in != null) {            try {                in.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }    return result;}

在js里集成下拉刷新

$(function () {//初始化下拉刷新$(document.body).pullToRefresh();//下拉刷新$(document.body).on("pull-to-refresh", function() {window.location.reload();});//当下拉刷新的工作完成之后,需要重置下拉刷新的状态$(document.body).pullToRefreshDone();})
img_19c1a45898df83717606b31d8f4f6c9a.png
效果图

上面的代码只能完成一点初级的要求,性能比较差.比较冗余,下面我们对上面的代码进行优化----->查看更多功能(先跳转jsp界面,再调用加载更多方法)

先贴上代码

public class EvaluateController {@Autowiredprivate IEvaluateService service;//先跳转evaluate.jsp界面@RequestMapping("/evaluate")public String evaluatemanager(Model model) {    return "evaluate";}/** * 作用:加载更多,执行查询分页类似的功能,点击查询更多功能会加载固定数量的消息,知道加载全部 * @param qo  封装当前页,页面大小,和起始位置 * @return 返回pageResult对象 */@RequestMapping("/loadmore_list")@ResponseBodypublic PageResult loadMorelist(QueryObject qo) {    PageResult pageResult=service.evaluatePageResult(qo);    List
rows= pageResult.getRows(); for (Evaluate li : rows) { String openid = li.getOpenID(); //调用接口获取用户详细信息 String result = HttpUtil.get(WeixinUtil.GET_USERINFO_URL.replace("ACCESS_TOKEN", WeixinUtil.getAccessToken()).replace("OPENID", openid)); //转成json对象 JSONObject json = JSON.parseObject(result); String nickname = (String) json.get("nickname"); String headimgurl = (String) json.get("headimgurl"); li.setNickname(nickname); li.setHeadimgurl(headimgurl); } return pageResult;}}

接着我们来修改jsp界面

只是把上面的jsp界面的<body>内的内容修改一下,把原来的循环所有的评论条数的代码全部删除,点击加载更多通过js动态向jsp标签中批量添加数据 ,这样明显更加灵活,

下拉刷新
释放刷新
正在刷新
宝贝评价
咻咻

evaluate.js

$(function () {//下拉刷新$(document.body).pullToRefresh();$(document.body).on("pull-to-refresh", function () {    window.location.reload();});$(document.body).pullToRefreshDone();});$(function () {/*初始化*//*计数器*/var counter = 1;/*从那一页开始加载*/var pageStart = 1;/*每次加载多少条数据*/var pageSize = 10;/*第一次加载页面*/getData(counter, pageSize);/*监听点击加载更多更多按钮,每次点击都会触发对应的事件*/$(document).on('click', '.js-load-more', function () {    counter++;    pageStart = counter * pageSize;    alert("counter:"+counter + "pageSize:" + pageSize);    //第一次加载页面时就要调用    getData(counter, pageSize);    $(".js-load-more").hidden=true;});})

//传入参数查询结果集function getData(pageStart, pageSize) {$.ajax({    type: 'GET',    url: '/loadmore_list.do?page=' + pageStart + "&rows=" + pageSize,    dataType: 'json',    success: function (reponse) {        console.info(reponse);        var data = reponse.rows;        var total=reponse.total;        var sum = reponse.rows.length;        var result = '';        if (sum - pageStart < pageSize) {            pageSize = sum - pageStart;        }    //拼接要展示的界面        for (var i = 0; i < data.length; i++) {            result += '
' + '![]('+data[i].headimgurl+')
'+ '

'+data[i].nickname+'

' + '

'+data[i].content+'

' + '
'; } //将拼接结果追加到指定位置 $('.weui-panel__bd').append(result); /*隐藏more按钮*/ if (pageStart >= total) { $(".js-load-more").hidden=true; } else { $(".js-load-more").show(); } }, error: function (xhr, type) { alert('亲你的网络不稳定哦!'); }});}

这样我们就把需要优化的部分优化了

转载地址:http://fywzx.baihongyu.com/

你可能感兴趣的文章
常见的位运算技巧总结(膜wys)
查看>>
python魔法函数(二)之__getitem__、__len__、__iter__
查看>>
EL表达式无法显示Model中的数据
查看>>
Linux应用小技巧
查看>>
考题纠错2
查看>>
ps6-工具的基础使用
查看>>
关于CefSharp.WinForms的学习
查看>>
灵活运用 SQL SERVER FOR XML PATH
查看>>
es 加磁盘扩容
查看>>
linux 参数内核
查看>>
使用Azcopy在Azure上进行HBase的冷热备份还原
查看>>
计组_定点数一位乘_布斯公式
查看>>
linux下使用过的命令总结(未整理完)
查看>>
ES6的一些文章
查看>>
LeetCode 198, 213 House Robber
查看>>
New Year Permutation(Floyd+并查集)
查看>>
Qt编写输入法V2018超级终结版
查看>>
<context:component-scan>详解
查看>>
DS博客作业07--查找
查看>>
[JOI2017] サッカー (Soccer)
查看>>