Invient add-on

Hi folks,

I tried to run the example but get the following error:

Widgetset does not contain implementation for com.invient.vaadin.charts.InvientCharts.

I have the following in /VAADIN/widgetsets :

com.invient.vaadin.charts.widgetset.InvientChartsWidgetset
com.invient.vaadin.InvientChartsDemoAppWidgetset
com.vaadin.terminal.gwt.DefaultWidgetSet

What am I missing?

How are you compiling the widgetset? In the demo source code, choose InvientChartsDemoAppWidgetset.gwt.xml and compile the widgetset. This will create /VAADIN/widgetsets/com.invient.vaadin.InvientChartsDemoAppWidgetset directory.

Also make sure that the servlet InvientCharts/demo/com/invient/vaadin/InvientChartsDemoAppServlet.java has a parameter widgetset and has a value com.invient.vaadin.InvientChartsDemoAppWidgetset.

Now I’m getting the following error in the console:

.
.
.
Going to create a chart.
JavaScriptException: (TypeError): Cannot convert ‘$wnd.Highcharts’ to object
Processing time was 3521ms for 6159 characters of JSON
Referenced paintables: 9

Thanks,
Dan

In order to use InvientCharts, you should extend Vaadin’s AbstractApplicationServlet and include following code


@Override
    protected void writeAjaxPageHtmlVaadinScripts(Window window,
            String themeName, Application application, BufferedWriter page,
            String appUrl, String themeUri, String appId,
            HttpServletRequest request) throws ServletException, IOException {
        page.write("<script type=\"text/javascript\">\n");
        page.write("//<![CDATA[\n");
        page.write("document.write(\"<script language='javascript' src='./jquery/jquery-1.4.4.min.js'><\\/script>\");\n");
        page.write("document.write(\"<script language='javascript' src='./js/highcharts.js'><\\/script>\");\n");
        page.write("document.write(\"<script language='javascript' src='./js/modules/exporting.js'><\\/script>\");\n");
        page.write("//]]>\n</script>\n");
        super.writeAjaxPageHtmlVaadinScripts(window, themeName, application,
                page, appUrl, themeUri, appId, request);
    }

Also make sure that you have highcharts library as part of your web application.

I finally got it working. Thanks for your work on this add-on!

Hello,

I have the same problem "
Widgetset does not contain implementation for com.invient.vaadin.charts.InvientCharts
" but with a liferay portal integration.

I compile th widget with ant and widget file in my portlet : com.invient.vaadin.InvientChartsWidgetset.gwt.xml
[i]



[/i]

the jar dependency of invient is added.

There are no problems during compilation widget but when I copied the result compilation
FROM MyPortlet/VAADIN/widgetsets/com.invient.vaadin.InvientChartsWidgetset
TO ROOT/html/VAADIN/widgetsets/com.invient.vaadin.InvientChartsWidgetset

When the page is executed, this error is displayed…

Widgetset does not contain implementation for com.invient.vaadin.charts.InvientCharts.

Please help me.

THX

Have you changed the Liferay property “vaadin.widgetset” (portal-ext.properties, see e.g.
this page
) to “com.invient.vaadin.InvientChartsWidgetset” or defined an “widgetset” init-parameter to the portlet with the same value? By default it will use the “com.vaadin.portal.gwt.PortalDefaultWidgetSet” which does not contain any add-ons.

BTW: Vaadin Control Panel for Liferay should help you manage the widgetset automatically (it will overwrite the PortalDefaultWidgetSet though so it will be used by all portlets automatically)

Yes my portal-ext.properties has been updated:

vaadin.widgetset=com.invient.vaadin.InvientChartsDemoAppWidgetset

There is a potentialy problem in invient-chart.jar because the mapping widget
@ClientWidget(VInvientCharts.class)
in InvientCharts.class is not in good location. This should be
@ClientWidget(com.invient.vaadin.charts.widgetset.client.ui.VInvientCharts.class)
.

Well what means exactly the problem “Widgetset does not contain implementation for com.invient.vaadin.charts.InvientCharts” :
-that the html/VAADIN/widgetsets/ have no ressource for the widget
-or the mapping is bad??

Do you have other idea to resolve my problem?

The server side component (InvientCharts) tells Vaadin that on the client side a VInvientCharts class should be used to show the component. When the browser gets the information that this class should be used it checks if the compiled widgetset (javascript) includes this client side class. If it does, everything works out fine. If it does not contain it, “Widgetset does not contain implementation for…” is rendered instead of the actual component.

Typically it is a problem in the compilation of the widgetset. You should check that during compilation you see

INFO: Widgetsets found from classpath:
com.vaadin.terminal.gwt.DefaultWidgetSet in […]

your.widgetset in [...]

com.invient.vaadin.charts.widgetset.InvientChartsWidgetset in [...]

and later

           Widget set will contain implementations for following components: 
           	[...]

           	com.invient.vaadin.charts.InvientCharts
           	[...]

I finally used the vaadin control panel and it’s work perfectly.

Many thanks.

Hello,

I am joining this thread with the same problem that persists even after having checked all things that was mentioned above:

Exit [getChartData]

Going to create a chart.
JavaScriptException: (TypeError): Cannot convert ‘$wnd.Highcharts’ to object

  • my widgetset inherits …InvientChartsWidgetset
  • gwt compiles widgetset without warnings
  • my servlet extends vaadins’ ApplicationServlet (as in the demo), references to jquery and highcharts libs corresponds to that of in war
  • moreover my war contains WEB-INF/lib/invientcharts-0.8.5.jar

The webapp works with no charting component.
The used component versions:
vaadin: 6.7.2
invientcharts: 0.8.5
jquery: 1.7.1
highcharts: 2.1.9

I am stuck here not knowing what to look for.
Any help appreciated!

Zsolt

It must be a path problem within the webapp.

The war structure is as follows:


WEB-INF/
    classes
    lib
    web.xml
VAADIN/
    themes
    widgetsets
highcharts/
    ...
jquery/
    ...

The application is seen under Context path = /psmc (as set by Jetty).
I can see …/psmc/VAADIN/themes/my-chameleon/favicon.ico, but …/psmc/highcharts/highcharts.js does not show up in the browser (supposed to display it at all).

The structure follows what is under the add-on’s demo WebContent, just as servlet’s references to js libs.
(e.g. “./jquery/…”)

Any suggestion?

Zsolt

My guess as to why VAADIN is visible but the other resources are not: For security reasons, the Vaadin servlet only uses a classpath based fallback mechanism to serve static resources under /VAADIN (but not elsewhere). The question, though, is why they are not found and served before coming to the fallback branch…

Thanks for your comment, Henri.

While I keep investigating the case, here is some more info.

The above error message is seen in Opera, Firefox gives a bit different and more details:

JavaScriptException: (TypeError): $wnd.Highcharts is undefined stack: I_([object Array]
,[object Object]
)@http://localhost:8000/psmc/VAADIN/widgetsets/hu.prolan.slm.vaadin.widgetset.SlmmApplicationWidgetSet/2F67C7E234E98625B2D7E531FE2E4D6C.cache.html

The message contains a tremendous amount of reference to the above cache.html.

Well, I have seen in another thread that putting js libs under VAADIN dir (of course by modifying references to them in servlet at the same time) solved a similar case.

And yes, it did for my problem too!
I wonder why following the demo application fails sometimes, though.