jqGrid基础学习:11jqGrid的查询时和后台的交互

jqGrid查询时和后台交互是一个比较棘手的问题,因为发送过来的数据不规则。


单字段
我们通过Firefox的firebug来进行调试,我们发现提交搜索请求后,向后台发送的参数如下

单字段同后台交互


由此,我们看出单字段查询,jqGrid向服务器传递的参数是searchField、searchString、searchOper这三个参数。
searchField代表要查询的字段,searchString是查询的内容,searchOper是操作,后台获取到的searchOper的值,对应的是’eq’,'ne’,'lt’,'le’,'gt’,'ge’,'bw’,'bn’,'in’,'ni’,'ew’,'en’,'cn’,'nc’,这些可以再jqGrid设置那些使用,那些不使用。

多字段查询
使用同样的方法,我们可以发现,多字段查询,jqGrid向后台传递的参数为一个json字符串。

jqGrid多字段查询


因此,取得这个数据需要进行对json数据进行解析。

同时,我们注意到。不管是单字段查询还是多字段查询,如果前台执行了查询,都会向后台传递一个_search参数,来指明后台是否启用搜索。

其他的就不废话了,直接上源码。
新建一个规则的类

public class SearchRule {
        private String field;   //查询字段
    private String op;      //查询操作
    private String data;    //选择的查询值
        public String getField() {
                return field;
        }
        public void setField(String field) {
                this.field = field;
        }
        public String getOp() {
                return op;
        }
        public void setOp(String op) {
                this.op = op;
        }
        public String getData() {
                return data;
        }
        public void setData(String data) {
                this.data = data;
        }
}

新建一个过滤的类

public class FilterSearch {
        private String groupOp; //多字段查询时分组类型,主要是AND或者OR   

        private List<searchrule> rules; //多字段查询时候,查询条件的集合 

        public String getGroupOp() {
                return groupOp;
        }
        public void setGroupOp(String groupOp) {
                this.groupOp = groupOp;
        }
        public List</searchrule><searchrule> getRules() {
                return rules;
        }
        public void setRules(List</searchrule><searchrule> rules) {
                this.rules = rules;
        }

}

</searchrule>

查询的工具类

public class JqGridHandler {

        private HttpServletRequest request = null;

        private String _search = "false";
        private String searchField;
        private String searchOper;
        private String searchString;
        private String filters;
        private String sidx = "1";
        private String sord = "desc";

        // 存储总体的search
        FilterSearch filterSearch = null;

        public JqGridHandler() {

        }

        public JqGridHandler(HttpServletRequest request) {
                this.request = request;

        }

        public String getWheres(String prefix, boolean isWhere) {
                conditions();
                if(tranToSQL(prefix).trim().equals("")){
                        return "";
                }
                if (!isWhere) {
                        return new StringBuilder(" where ").append(tranToSQL(prefix))
                                        .toString();
                }
                return new StringBuilder(" and ").append(tranToSQL(prefix)).toString();
        }

        public String getOrders(String prefix, boolean isOrder) {
                init();
                StringBuilder sb = new StringBuilder();
                if (isOrder) {
                        if (null != prefix) {
                                sb.append(prefix).append(".");
                        }

                } else {
                        sb.append(" order by ");
                        if (null != prefix) {
                                sb.append(prefix).append(".");
                        }
                }
                return sb.append(doTables(sidx)).append(" ").append(sord).toString();
        }

        // 根据conditions转换成sql格式
        public String tranToSQL(String prefix) {
                StringBuilder sb = new StringBuilder("");

                if (null != filterSearch) {
                        List<searchrule> rules = filterSearch.getRules();
                        int count = 0;
                        if (null != rules && (count = rules.size()) > 0) {
                                for (SearchRule rule : rules) {
                                        if (null != rule.getField() && null != rule.getData()
                                                        && null != rule.getOp()) {
                                                if ("eq".equalsIgnoreCase(rule.getOp())) {

                                                        sb.append(rule.getField()).append(" = ")
                                                                        .append("'").append(rule.getData()).append(
                                                                                        "'");

                                                } else if ("nq".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" != ").append(
                                                                        "'").append(rule.getData()).append("'");
                                                } else if ("lt".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" < ")
                                                                        .append("'").append(rule.getData()).append(
                                                                                        "'");
                                                } else if ("le".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" <= ").append(
                                                                        "'").append(rule.getData()).append("'");
                                                } else if ("gt".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" > ")
                                                                        .append("'").append(rule.getData()).append(
                                                                                        "'");
                                                } else if ("ge".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" >= ").append(
                                                                        "'").append(rule.getData()).append("'");
                                                } else if ("bw".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" like ").append(
                                                                        "'").append(rule.getData()).append("%")
                                                                        .append("'");
                                                } else if ("ew".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" like ").append(
                                                                        "'").append("%").append(rule.getData())
                                                                        .append("'");
                                                } else if ("cn".equalsIgnoreCase(rule.getOp())) {
                                                        if (null != prefix) {
                                                                sb.append(prefix).append(".");
                                                        }
                                                        sb.append(rule.getField()).append(" like ").append(
                                                                        "'").append("%").append(rule.getData())
                                                                        .append("%").append("'");
                                                } else {

                                                }
                                                count--;
                                                if (count > 0) {
                                                        if (null != filterSearch.getGroupOp()) {
                                                                if (filterSearch.getGroupOp().equals("and"))
                                                                        sb.append(" and ");
                                                                else
                                                                        sb.append(" or ");
                                                        }

                                                }
                                        }

                                }
                        }
                }
                return sb.toString();
        }

        // 装载
        @SuppressWarnings("unchecked")
        private void conditions() {
                // 初始化,如果request为空,说明是从set进来的。
                init();

                // 分拆,全部写入filersearch
                if (null != _search && "true".equalsIgnoreCase(_search)) {
                        // 先写多选择的,一般有多选择就不会有单选择。
                        if (null != filters && filters.length() > 0) {
                                Map m = new HashMap();
                                m.put("rules", SearchRule.class);
                                filterSearch = (FilterSearch) JsonUtils.getDTOList(filters,
                                                FilterSearch.class, m);

                        } else {
                                if (null != searchOper && null != searchString
                                                && null != searchField) {
                                        SearchRule rule = new SearchRule();
                                        rule.setData(searchString);
                                        rule.setOp(searchOper);
                                        rule.setField(doTables(searchField));
                                        filterSearch = new FilterSearch();
                                        filterSearch.setGroupOp(null);
                                        List</searchrule><searchrule> rules = new ArrayList</searchrule><searchrule>();
                                        rules.add(rule);
                                        filterSearch.setRules(rules);
                                }
                        }
                }

        }

        private  void init() {
                if (request != null) {
                        _search = request.getParameter("_search");
                        searchOper = request.getParameter("searchOper");
                        searchString = request.getParameter("searchString");
                        searchField = request.getParameter("searchField");
                        filters = request.getParameter("filters");
                        sidx = request.getParameter("sidx");
                        sord = request.getParameter("sord");
                }
        }

        public HttpServletRequest getRequest() {
                return request;
        }

        public void setRequest(HttpServletRequest request) {
                this.request = request;
        }

        public String get_search() {
                return _search;
        }

        public void set_search(String _search) {
                this._search = _search;
        }

        public String getSearchField() {
                return searchField;
        }

        public void setSearchField(String searchField) {
                this.searchField = searchField;
        }

        public String getSearchOper() {
                return searchOper;
        }

        public void setSearchOper(String searchOper) {
                this.searchOper = searchOper;
        }

        public String getSearchString() {
                return searchString;
        }

        public void setSearchString(String searchString) {
                this.searchString = searchString;
        }

        public String getFilters() {
                return filters;
        }

        public void setFilters(String filters) {
                this.filters = filters;
        }

        public String getSidx() {
                return sidx;
        }

        public void setSidx(String sidx) {
                this.sidx = sidx;
        }

        public String getSord() {
                return sord;
        }

        public void setSord(String sord) {
                this.sord = sord;
        }

        public FilterSearch getFilterSearch() {
                return filterSearch;
        }

        public void setFilterSearch(FilterSearch filterSearch) {
                this.filterSearch = filterSearch;
        }

        private String doTables(String str){
                if(str.startsWith("__")){
                        str = str.substring(2);
                        return str.replaceAll("_", ".");
                } else {
                        return str;
                }

        }
}
</searchrule>

其中,先不要去理睬dotables函数是做什么的。

json工具类参照json工具类进行。

你可能感兴趣的:(json,String,HashMap,null,search,Class)