Note: this document is work in progress and not complete at the moment
My example GWT module is an AJAX calculator called org.matheclipse.gwt.Calc which is separately developed in the GWT hosted mode and should now be included into a new JAMWiki Special:Calc page.
In the main GWT EntryPoint in the method org.matheclipse.gwt.client.Calc#onModuleLoad() we can distinguish between non-hosted mode and hosted mode with the GWT.isScript() method. In the onModuleLoad() method we also create the main calculator GUI panel and insert it into a prepared "slot1" in calc.jsp (see below).
public void onModuleLoad() {
CALC_SERVICE = (CalcServiceAsync) GWT.create(CalcService.class);
ServiceDefTarget target = (ServiceDefTarget) CALC_SERVICE;
if (GWT.isScript()) {
String url = GWT.getModuleBaseURL();
url += "calc";
target.setServiceEntryPoint(url);
} else {
target.setServiceEntryPoint("/calc");
}
...
// Create a panel for the GUI and insert it into a prepared "slot1" in cals.jsp
RootPanel slot1 = RootPanel.get("slot1");
slot1.add(panel);
...
protected ModelAndView handleJAMWikiRequest(HttpServletRequest request,
HttpServletResponse response, ModelAndView next, WikiPageInfo pageInfo)
throws Exception {
pageInfo.setPageTitle(new WikiMessage("calc.title"));
pageInfo.setAction(WikiPageInfo.ACTION_CALC);
pageInfo.setSpecial(true);
return next;
}
calc.title=AJAX online calculator
...
public static final int ACTION_CALC = 999;
...
public boolean getActionCalc() {
return (this.action == ACTION_CALC);
}
<c:when test="${pageInfo.actionCalc}">
<jsp:include page="calc.jsp" flush="true" />
</c:when>
In a separated GWT project I compiled all GWT files into the \www\org.matheclipse.gwt.Calc directory. These files must now been copied into a JAMWiki subdirectory.
For a better organization all compiled (static) GWT files in this example go into subdirectory:
/wiki/static
and the main gwt.js is stored in
/wiki/static/gwt.js
/www/org.matheclipse.gwt.Calc
directory into the directory
/wiki/static/org.matheclipse.gwt.Calc
<meta name='gwt:module' content='/wiki/static/org.matheclipse.gwt.Calc=org.matheclipse.gwt.Calc'>
<%@ page errorPage="/WEB-INF/jsp/error.jsp"
contentType="text/html; charset=utf-8"
%>
<%@ include file="page-init.jsp" %>
<!-- GWT CSS styles follow in this section -->
<style type="text/css">
...
</style>
<script language='javascript' src='/wiki/static/gwt.js'></script>
<iframe id='__gwt_historyFrame' style='width:0;height:0;border:0'></iframe>
<div id="loadingWait">Loading...</div>
<table align="left" verticalalign="top">
<tr><td id="slot1"></td></tr>
</table>
...
<servlet>
<servlet-name>calculator</servlet-name>
<servlet-class>org.matheclipse.gwt.server.CalcServiceImpl</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
<servlet-name>calculator</servlet-name>
<url-pattern>/static/org.matheclipse.gwt.Calc/calc</url-pattern>
</servlet-mapping>