grails 常用技巧

1 修改端口:

          -Dserver.port=7070 run-app

2 查询

    

def index(Integer max) {    params.max = Math.min(max ?: 10, 100)    def results=SupplierInfo.createCriteria().list(params) {        if (params.userName){
            like("userName",params.userName+"%")
        }        if (params.supplierName){
            like("supplierName",params.supplierName+"%")
        }        if (params.licence){
            eq("licence",params.licence)
        }
    }
    respond results, model: [supplierInfoInstanceCount: results.totalCount]
}

3 日历控件

 

<asset:javascript src="plugins/bootstrap_datetimepicker/bootstrap-datetimepicker.js" />
<asset:javascript src="plugins/bootstrap_datetimepicker/locales/bootstrap-datetimepicker.zh-CN.js" />
((){
        ().({
            : : })})
: %: %

4 分页查询,带回查询条件

<div class="text-right">
   <g:paginate total="${expressOrderInstanceCount ?: 0}"、params='[orderStatus:"${params.orderStatus}",startDate:"${params.startDate}",endDate:"${params.endDate}"]>
</div>

5 异步请求查询

(id){
    data = {}data[] = id.({
        :: : : : .(data): (data) {
            (dataid)
        }
    })
}
</script>
class ExpressOrderController {
    def printExpressOrder(@RequestBody ExpressOrderId dto ){}
    class ExpressOrderId {
        String expressOrderId
    }
}

6 rails导出Excel

 1、在 BuildConfig.groovy 中导入插件 

compile ":excel-export:0.2.1"

 2、导出Excel的具体实现

/**     * 导出Excel     * */    def export(){        def list=ExpressOrder.list()//        def headers=['运单号','收件人姓名','收件人电话','目的省市县','详细地址']        def headers = [message(code: 'expressOrder.waybillNo.label'),
                       message(code: 'expressOrder.receive.conctas.label'),
                       message(code: 'expressOrder.receive.phoneNo.label'),
                       message(code: 'expressOrder.receive.addr.label'),
                       message(code: 'expressOrder.receive.address.label')]        def withProperties=['waybillNo','receive.conctas','receive.phoneNo','receive.addr','receive.address']        def fileName="快递单"+yyyyMMddhhmmssSdf.format(new Date())+".xlsx"        new WebXlsxExporter().with {
            setResponseHeaders(response,new ExcelUtil().encodeFileName(request,fileName))//防止导出Excel文件名中文乱码            fillHeader(headers)            add(list, withProperties)
            save(response.outputStream)
        }
    }

 3、工具类
 

class ExcelUtil {    /**     * <pre>     * 处理下载中文文件名时出现的乱码问题     * </pre>     * @param request     * @param fileName     * @return     */    def static String encodeFileName(HttpServletRequest request,String fileName){
        String agent = request.getHeader("USER-AGENT");        if (null != agent && -1 != agent.indexOf("MSIE")) {            return URLEncoder.encode(fileName, "UTF-8");
        }else if (null != agent && -1 != agent.indexOf("Mozilla")) {            return "=?UTF-8?B?"+(new String(Base64.encodeBase64(fileName.getBytes("UTF-8"))))+"?=";
        } else {            return fileName;
        }
    }
}

7 调用百度地图定位坐标

 1、main.gspy页面引用了好多没用的JS导致在做自己页面时,如果引用其他插件很容易引起JS冲突而无法使用,这个谭大师后续可能会优化模板,精简公用JS的。
        2、项目其他模板页面中有很多弹出或其他不错的样式,可以借鉴查看,以免自己引用的外部插件出现冲突。

        PS:百度坐标系和GPS坐标不一样,百度坐标是在GPS坐标基础上进行了加密。

// 地图部分
var map;
//创建和初始化地图函数:
function initMap(LongitudeId,LatitudeId) {
    createMap(LongitudeId,LatitudeId);// 创建地图
    setMapEvent();// 设置地图事件
}

// 创建地图函数:
function createMap(LongitudeId,LatitudeId){
    if(!map){
        map = new BMap.Map("map_canvas");
        var defaultLng = "104.072258";//默认经度
        var defaultLat = "30.663484";//默认纬度
        var flag = false;
        if($("#ssLongitude").val()!=""){
            defaultLng = $("#"+LongitudeId).val();
            defaultLat = $("#"+LatitudeId).val();
            flag = true;
        }
        var point = new BMap.Point(defaultLng,defaultLat);//定义一个中心点坐标
        map.centerAndZoom(point,11);//设定地图的中心点和坐标并将地图显示在地图容器中
        // 移动到中心点
        setTimeout(function(){
            map.panTo(point);
        },500);

        if(flag){
            // 加载默认标注
            var markerDefault = new BMap.Marker(point);
            map.addOverlay(markerDefault);
        }

        //单击获取点击的经纬度
        map.addEventListener("click",function(e){
            map.clearOverlays();                //清除标注
            var marker = new BMap.Marker(e.point);// 创建标注
            map.addOverlay(marker);             // 将标注添加到地图中
            marker.disableDragging();           // 不可拖拽

            // 回写坐标
            $("#"+LongitudeId).val(e.point.lng);//经度
            $("#"+LatitudeId).val(e.point.lat);//纬度
        });

    }

}

// 地图事件设置函数:
function setMapEvent() {
    map.enableScrollWheelZoom();// 启用地图滚轮放大缩小
    map.disableDoubleClickZoom();//禁用鼠标双击放大
    map.enableKeyboard();// 启用键盘上下左右键移动地图
}


function jumpComment() { 
      $("#makeComment").colorbox({ 
width: "50%", inline: true, href: "#inline_comment" }); 
      $("#makeComment").click(); 
      initMap('ssLongitude','ssLatitude');// 创建和初始化地图 
   }

</script>


<input type="button" name="getTD" onclick="jumpComment()" 
value="<g:message code="scenicspot.ssType.btn" />" />// 页面引入


目前各项目Grails框架下JS及Image静态文件存放地址说明

目前正在进行的Grails框架下的项目,在放置JS及相关静态文件时,需遵循Grails的目录规则,要放在以下目录
        其中,images存放页面需要引用的图片文件,javascripts目录存放需要引用的JS文件,stylesheets存在样式文件。
        文件引用方式分别为:

<asset:image src="add.jpg" />
<asset:javascript src="demo/charts.js" />
<asset:stylesheet href="bootstrap/bootstrap.css" />


你可能感兴趣的:(grails,常用技巧)