Another option: add -Dfile.encoding=UTF-8 to $JAVA_OPTS in $CATALINA_HOME/bin/setenv.sh
Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Fri, Oct 28, 2016 at 9:54 AM, Stephen Cameron <steve.cameron...@gmail.com > wrote: > Thanks Martin, > > Its most likely a Tomcat/Jetty server difference, that is the difference > between my dev and client/production setup and hence the most likely > reason. > > On Fri, Oct 28, 2016 at 6:48 PM, Martin Grigorov <mgrigo...@apache.org> > wrote: > > > Hi, > > > > On Fri, Oct 28, 2016 at 9:23 AM, Dan Haywood < > d...@haywood-associates.co.uk > > > > > wrote: > > > > > ok, thanks for digging into that. > > > > > > If that does reveal itself to be the issue, perhaps the better solution > > > would be to find a way for our viewer to serve up the file with the > > correct > > > encoding. > > > > > > @Martin - is there anything obvious that the Isis/Wicket viewer might > be > > > doing wrong here? > > > > > > > See > > https://github.com/apache/wicket/blob/3e765bae3773b5da370cdf4ed1dd59 > > 0c95f7ed9d/wicket-core/src/main/java/org/apache/wicket/ > > settings/MarkupSettings.java#L51 > > Maybe the platform encoding is not UTF-8 ?! > > @Stephen: try to set the encoding manually in > IsisWicketApplication#init(): > > getMarkupSettings().setDefaultMarkupEncoding("UTF-8") > > > > I'll fix the name of the author for WicketStuff 7.5.0. > > > > > > > Thx > > > Dan > > > > > > On 28 October 2016 at 09:07, Stephen Cameron < > steve.cameron...@gmail.com > > > > > > wrote: > > > > > > > Thats what is different at home, no '?', so most likely explanation. > > I'll > > > > fork the component on github and see if I can get it fixed. > > > > > > > > > > > > On Fri, Oct 28, 2016 at 3:50 PM, Stephen Cameron < > > > > steve.cameron...@gmail.com > > > > > wrote: > > > > > > > > > Possibly due to a single character encoding issue in the surname of > > the > > > > > first author of wicket-gmap.js? > > > > > > > > > > /* > > > > > * Wicket GMap3 > > > > > * > > > > > * @author Tilman M?ller > > > > > * @author Joachim F. Rohde > > > > > */ > > > > > > > > > > > > > > > On Fri, Oct 28, 2016 at 3:21 PM, Stephen Cameron < > > > > > steve.cameron...@gmail.com> wrote: > > > > > > > > > >> Hi, > > > > >> > > > > >> I have an issue that I previously mentioned, where nothing happens > > on > > > > >> clicking a button. > > > > >> > > > > >> This is only at the client site, and I had a work-around in place > to > > > get > > > > >> past it. > > > > >> > > > > >> However, I think I have the cause, which is an issue in the wicket > > > > 'gmap' > > > > >> component Javascript file. > > > > >> > > > > >> There is simply a '?' character at the start of this file as you > can > > > see > > > > >> below (the file as seen by Firefox): > > > > >> > > > > >> Maybe there is a simple answer as to why this is appearing? > > > > >> > > > > >> > > > > >> Thanks > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> view-source:http://lifechatsdb/chats/wicket/wicket/resource/org. > > > > wicketstuff.gmap.WicketGMapJsReference/wicket-gmap-ver- > > > > E237F6D407E762EA8D06758EE1452F25.js > > > > >> > > > > >> > > > > >> > > > > >> ? > > > > >> > > > > >> > > > > >> if (typeof(Wicket) === 'undefined') { > > > > >> window.Wicket = {}; > > > > >> } > > > > >> else if (typeof(Wicket) !== "object") { > > > > >> throw new Error("Wicket already exists but is not an object"); > > > > >> } > > > > >> function WicketClientGeocoder() { > > > > >> try { > > > > >> this.coder = new google.maps.Geocoder(); > > > > >> } catch (e) { > > > > >> if( !Wicket.maps['_failSilently'] ) { > > > > >> throw e; > > > > >> } > > > > >> } > > > > >> this.getLatLng = function(callBack, addressId){ > > > > >> var address = Wicket.$(addressId).value; > > > > >> this.coder.geocode({ > > > > >> 'address': address > > > > >> }, function(results, status){ > > > > >> if (status === google.maps.GeocoderStatus.OK) { > > > > >> callBack = callBack + '&address=' + results[0].formatted_address; > > > > >> callBack = callBack + '&coordinates=' + > > results[0].geometry.location; > > > > >> } > > > > >> callBack = callBack + '&status=' + status; > > > > >> Wicket.Ajax.ajax({ > > > > >> 'u':callBack > > > > >> }); > > > > >> }); > > > > >> } > > > > >> } > > > > >> Wicket.maps = {} > > > > >> function WicketMap(id, failSilently) { > > > > >> Wicket.maps[id] = this; > > > > >> if(failSilently) { > > > > >> Wicket.maps['_failSilently'] = failSilently; > > > > >> } > > > > >> this.options = {}; > > > > >> try { > > > > >> this.map = new google.maps.Map(Wicket.$(id)); > > > > >> } catch (e) { > > > > >> if(!failSilently) { > > > > >> throw e; > > > > >> } > > > > >> } > > > > >> this.overlays = {}; > > > > >> this.onEvent = function(callBack, params) { > > > > >> params['center'] = this.map.getCenter(); > > > > >> params['bounds'] = this.map.getBounds(); > > > > >> params['zoom'] = this.map.getZoom(); > > > > >> params['currentMapType'] = this.getMapTypeString(this. > > > > map.getMapTypeId()); > > > > >> for ( var key in params) { > > > > >> callBack = callBack + '&' + key + '=' + params[key]; > > > > >> } > > > > >> Wicket.Ajax.ajax({ > > > > >> 'u':callBack > > > > >> }); > > > > >> } > > > > >> this.addListener = function(event, callBack) { > > > > >> var self = this; > > > > >> google.maps.event.addListener(this.map, event, function() { > > > > >> var params = {}; > > > > >> for ( var p = 0; p < arguments.length; p++) { > > > > >> if (arguments[p] != null) { > > > > >> if (arguments[p].latLng != null) > > > > >> { > > > > >> params['lat'] = arguments[0].latLng.lat(); > > > > >> params['lng'] = arguments[0].latLng.lng(); > > > > >> } > > > > >> } > > > > >> } > > > > >> self.onEvent(callBack, params); > > > > >> }); > > > > >> } > > > > >> this.addOverlayListener = function(overlayID, event) { > > > > >> var self = this; > > > > >> var overlay = this.overlays[overlayID]; > > > > >> google.maps.event.addListener(overlay, event, function() { > > > > >> var params = {}; > > > > >> for ( var p = 0; p < arguments.length; p++) { > > > > >> if (arguments[p] != null) { > > > > >> params['argument' + p] = arguments[p]; > > > > >> } > > > > >> } > > > > >> if (overlay.getPosition) { > > > > >> params['overlay.latLng'] = overlay.getPosition(); > > > > >> } > > > > >> else if (overlay.getCenter) { > > > > >> > > > > >> params['overlay.latLng'] = overlay.getCenter(); > > > > >> } > > > > >> if (overlay.getRadius) { > > > > >> > > > > >> params['overlay.radius'] = overlay.getRadius(); > > > > >> } > > > > >> params['overlay.overlayId'] = overlay.overlayId; > > > > >> params['overlay.event'] = event; > > > > >> self.onEvent(self.overlayListenerCallbackUrl, params); > > > > >> }); > > > > >> } > > > > >> this.clearOverlayListeners = function(overlayID, event) { > > > > >> var overlay = this.overlays[overlayID]; > > > > >> google.maps.event.clearListeners(overlay, event); > > > > >> } > > > > >> this.setDraggingEnabled = function(enabled) { > > > > >> this.options.draggable = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setDoubleClickZoomEnabled = function(enabled) { > > > > >> this.options.disableDoubleClickZoom = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setScrollWheelZoomEnabled = function(enabled) { > > > > >> this.options.scrollwheel = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setScaleControlEnabled = function(enabled) { > > > > >> this.options.scaleControl = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setZoomControlEnabled = function(enabled) { > > > > >> this.options.zoomControl = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setMapTypeControlEnabled = function(enabled) { > > > > >> this.options.mapTypeControl = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setStreetViewControlEnabled = function(enabled) { > > > > >> this.options.streetViewControl = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setPanControlEnabled = function(enabled) { > > > > >> this.options.panControl = enabled; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.fitBounds = function(bounds) { > > > > >> this.options.bounds = bounds; > > > > >> this.map.setOptions(this.options); > > > > >> this.map.fitBounds(bounds); > > > > >> } > > > > >> this.panToBounds = function(bounds) { > > > > >> this.options.bounds = bounds; > > > > >> this.map.setOptions(this.options); > > > > >> this.map.panToBounds(bounds); > > > > >> } > > > > >> this.setMinZoom = function(minZoom) { > > > > >> this.options.minZoom = minZoom; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.setMaxZoom = function(maxZoom) { > > > > >> this.options.maxZoom = maxZoom; > > > > >> this.map.setOptions(this.options); > > > > >> } > > > > >> this.getMapTypeString = function(mapType) { > > > > >> switch (mapType) { > > > > >> case google.maps.MapTypeId.ROADMAP: > > > > >> return 'ROADMAP'; > > > > >> break; > > > > >> case google.maps.MapTypeId.SATELLITE: > > > > >> return 'SATELLITE'; > > > > >> break; > > > > >> case google.maps.MapTypeId.HYBRID: > > > > >> return 'HYBRID'; > > > > >> break; > > > > >> case google.maps.MapTypeId.TERRAIN: > > > > >> return 'TERRAIN'; > > > > >> break; > > > > >> default: > > > > >> return 'unknown'; > > > > >> break; > > > > >> } > > > > >> } > > > > >> this.setMapType = function(mapType) { > > > > >> this.map.setMapTypeId(mapType); > > > > >> } > > > > >> this.setZoom = function(level) { > > > > >> this.map.setZoom(level); > > > > >> } > > > > >> this.setCenter = function(center) { > > > > >> this.map.setCenter(center); > > > > >> } > > > > >> this.setCenterFailSafe = function(lat, lng, unbounded) { > > > > >> try { > > > > >> this.map.setCenter( new google.maps.LatLng(lat, lng, unbounded) ); > > > > >> } catch (e) { > > > > >> > > > > >> } > > > > >> } > > > > >> this.panTo = function(center) { > > > > >> this.map.panTo(center); > > > > >> } > > > > >> this.panDirection = function(dx, dy) { > > > > >> this.map.panBy(dx, dy); > > > > >> } > > > > >> this.zoomOut = function() { > > > > >> this.map.setZoom(this.map.getZoom()-1) > > > > >> } > > > > >> this.zoomIn = function() { > > > > >> this.map.setZoom(this.map.getZoom()+1) > > > > >> } > > > > >> this.addOverlay = function(overlayId, overlay) { > > > > >> this.overlays[overlayId] = overlay; > > > > >> overlay.overlayId = overlayId; > > > > >> overlay.setMap(this.map); > > > > >> overlay.toString = function() { > > > > >> return overlayId; > > > > >> }; > > > > >> } > > > > >> this.removeOverlay = function(overlayId) { > > > > >> if (this.overlays[overlayId] != null) { > > > > >> this.overlays[overlayId].setMap(null); > > > > >> this.overlays[overlayId] = null; > > > > >> } > > > > >> } > > > > >> this.clearOverlays = function() { > > > > >> if (this.overlays) { > > > > >> for (i in this.overlays) { > > > > >> this.overlays[i].setMap(null); > > > > >> } > > > > >> } > > > > >> this.overlays = {}; > > > > >> } > > > > >> this.triggerEvent = function(event) { > > > > >> google.maps.event.trigger(this.map, event); > > > > >> } > > > > >> this.triggerResize = function() { > > > > >> this.triggerEvent('resize'); > > > > >> } > > > > >> } > > > > >> Wicket.Event.add(window, "load", function(event){ > > > > >> if(typeof(Wicket.geocoder) === 'undefined') Wicket.geocoder = new > > > > WicketClientGeocoder(); > > > > >> }); > > > > >> > > > > >> > > > > >> > > > > > > > > > > > > > > >