Each and every HTML element has a tabIndex property that's always a integer 
(defaults to 0 or -1 depending on whether the element is "naturally" 
focusable or not). Foreign elements in an HTML document (SVG, MathML) 
aren't HTML elements, and thus don't have that tabIndex property.
…and GWT was designed to work with HTML elements only (because foreign 
elements are a relatively new thing, and GWT hasn't been updated – yet?) so 
it assumes tabIndex always exists.
In the stacktrace, you can see that GWT is trying to get tabIndex on your 
SVG element, which is 'undefined' as the property doesn't exist there, 
hence the error "JS value of type undefined, expected int".

The fix should be easy, so feel free to send in 
patches: http://www.gwtproject.org/makinggwtbetter.html (note: it's too 
late for GWT 2.6 I'm afraid, you'd have to wait for the next release or run 
from 'master')

On Monday, December 16, 2013 4:21:56 AM UTC+1, xxxyyy wrote:
>
>
> I want to include an SVG in a cell of a datagrid table.  I created a test 
> class which shows a blue square.  The square displays just fine but when I 
> click on it an exception shows up in eclipse (see below).   If I change the 
> <svg> to be a string, a span or an img, clicking on that works without 
> error.  Could someone tell me what am i doing wrong?   In the debugger the 
> target of the click event shows as [object SVGRectElement] whereas when I 
> flip the comments to, say, show an image instead of svg, the target is 
> '<img src='foo.png'>.
>
> -----
>     private class CustomCell extends AbstractCell<String> {
>         @Override
>         public void render(Cell.Context context, String value, 
> SafeHtmlBuilder sb) {
>             if (value == null) return;
> //            sb.append(SafeHtmlUtils.fromTrustedString(value.toString()));
>             
> //            sb.append(SafeHtmlUtils.fromTrustedString("<span>"));
> //            sb.appendEscaped(value);
> //            sb.append(SafeHtmlUtils.fromTrustedString("</span>"));
>
> //            sb.append(SafeHtmlUtils.fromTrustedString("<img 
> src=\"foo.png\"/>"));
>
>             sb.append(SafeHtmlUtils.fromTrustedString("<svg><rect 
> height='8px' width='8px' fill='blue'/>"));
>         }
>     }
> -----
>
>
>
> 21:40:45.436 [ERROR] [... Uncaught exception escaped
>
> com.google.gwt.dev.shell.HostedModeException: Something other than an int 
> was returned from JSNI method 
> '@com.google.gwt.dom.client.DOMImpl::getTabIndex(Lcom/google/gwt/dom/client/Element;)':
>  
> JS value of type undefined, expected int
>     at 
> com.google.gwt.dev.shell.JsValueGlue.getIntRange(JsValueGlue.java:266)
>     at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:144)
>     at 
> com.google.gwt.dev.shell.ModuleSpace.invokeNativeInt(ModuleSpace.java:262)
>     at 
> com.google.gwt.dev.shell.JavaScriptHost.invokeNativeInt(JavaScriptHost.java:75)
>     at com.google.gwt.dom.client.DOMImpl.getTabIndex(DOMImpl.java)
>     at com.google.gwt.dom.client.Element$.getTabIndex$(Element.java:474)
>     at 
> com.google.gwt.user.cellview.client.CellBasedWidgetImpl.isFocusable(CellBasedWidgetImpl.java:74)
>     at 
> com.google.gwt.user.cellview.client.AbstractHasData.onBrowserEvent(AbstractHasData.java:731)
>     at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1467)
>     at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1406)
>     at 
> com.google.gwt.user.client.impl.DOMImplStandard.dispatchEvent(DOMImplStandard.java:256)
>     at sun.reflect.GeneratedMethodAccessor54.invoke(Unknown Source)
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
>     at java.lang.reflect.Method.invoke(Method.java:613)
>     at 
> com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
>     at 
> com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
>     at 
> com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
>     at 
> com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
>     at 
> com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
>     at 
> com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
>     at 
> com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576)
>     at 
> com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:284)
>     at 
> com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
>     at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
>     at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:324)
>     at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)
>     at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
>     at java.lang.reflect.Method.invoke(Method.java:613)
>     at 
> com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
>     at 
> com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
>     at 
> com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
>     at 
> com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
>     at 
> com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
>     at 
> com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
>     at java.lang.Thread.run(Thread.java:780)
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to