は、だから私はこの権利のようなものを持っているが、今http://codepen.io/anon/pen/bBgVOL複数のパラメータでデータをフィルタリングする最も効率的な方法は?
これは、緯度/経度、その後、私のコントローラにすることを渡す私を返すGETのAJAX呼び出しに渡し、場所を取ります。
@RequestMapping(value = "/rentals", method = RequestMethod.GET)
public String rentResults(@RequestParam(value = "page", required = false) Integer pageNumber, @RequestParam(value = "lat", required = false) String lat, @RequestParam(value = "lng", required = false) String lng, @RequestParam(value = "rad", required = false) String rad, Map model) {
int total = 25;
if (pageNumber == null) {
pageNumber = 1;
} else {
pageNumber = (pageNumber - 1) * total + 1;
}
List<ForRent> rentals = new ArrayList();
int count;
if (lat == null && lng == null && rad == null) {
rentals = forRentDao.getRentalsByPage(pageNumber, total);
count = forRentDao.getNumOfRentals();
} else {
count = forRentDao.RentalRadiusCount(lat, lng, rad);
rentals = forRentDao.RentalRadius(lat, lng, rad, pageNumber, total);
String latParam = "&lat=" + lat;
String lngParam = "&lng=" + lng;
String radParam = "&rad=" + rad;
model.put("latParam", latParam);
model.put("lngParam", lngParam);
model.put("radParam", radParam);
}
int page;
if (count % total == 0) {
page = (count/total);
} else {
page = 1 + (count/total);
}
List<Integer> pages = new ArrayList();
for (int i = 1; i <= page; i++) {
pages.add(i);
}
model.put("pages", pages);
model.put("rentals", rentals);
boolean rent = true;
model.put("rent", rent);
return "rent";
}
JS
function initMap() {
var input = /** @type {!HTMLInputElement} */(
document.getElementById('address'));
var autocomplete = new google.maps.places.Autocomplete(input);
};
$('#searchRadius').on('click', function (e) {
var lati;
var lng;
var address = $('#address').val();
var rad = $('#radius').val();
var select = document.getElementById('sel');
var choice = select.value;
e.preventDefault();
$.ajax({
type: "GET",
url: "http://www.mapquestapi.com/geocoding/v1/address?key=&location=" + address,
beforeSend: function (xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-type", "application/json");
},
success: function postForm(response) {
lati = response.results[0].locations[0].latLng.lat;
lng = response.results[0].locations[0].latLng.lng;
if (rad == null) {
rad = '10';
}
console.log(lati, lng, rad);
var data = JSON.stringify({
lat: lati,
lng: lng,
rad: rad
});
if (choice == 1) {
$.ajax({
url: contextRoot + "/map/radius",
type: "POST",
data: data,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-type", "application/json");
},
success: function (data, status) {
console.log(data);
window.location = contextRoot + "/rent/rentals?lat=" + data.lat + "&lng=" + data.lng + "&rad=" + data.rad;
},
error: function (data, status) {
alert("bad api call");
console.log(status);
}
});
}
},
error: function (data, status) {
console.log(data.errors);
}}
);
});
を(はい、私はそれが厄介である知っている)ので、今それは緯度/経度/半径パラメータを指定せずにレンタルのリストを返します。いずれか、またはそれが適用されたパラメータでリストを返します。 。
私はこの約5~10以上のパラメータを追加する必要があります(例:http://codepen.io/anon/pen/QGdjoB用)
私は私のコントローラは、今、最も可能性の高い文句を言わない作業をセットアップし、私はよので、今後大きな頭痛の種になります持っている方法パラメータに基づいてif/else文をたくさん必要とします。私は現時点でSQLクエリを使用してデータをフィルタリングしています。すべてのデータを返してメモリにフィルタリングする方が良いでしょうか、このコントローラの応答をより良く/より効率的に設定する方法がありますか?
ありがとうございます!