Die vom IBM i-Assistenten für Webinteraktion generierten Klassen Action und ActionForm basieren auf Code, der in Schablonen enthalten ist. Es gibt vier Schablonen, die sowohl statischen als auch dynamischen Inhalt enthalten. Der statische Inhalt kann geändert und angepasst werden. Mit dem dynamischen Inhalt generiert der Assistent für Webinteraktion Code, der auf den im Assistenten vorgenommenen Einstellungen basiert. Schlüsselwörter in diesem Abschnitt beginnen mit dem Zeichen #. Die Schlüsselwörter sind für den Assistenten für Webinteraktion reserviert. Der dynamische Abschnitt kann angepasst werden, die reservierten Schlüsselwörter müssen jedoch in der vorgegebenen Reihenfolge bleiben. In diesen Abschnitt können Benutzerkommentare eingefügt werden. Diesen Kommentaren müssen die Zeichen ## vorangestellt werden. Die Benutzerkommentare werden nicht im endgültigen Code generiert.
Jede Schablone hat einen Einfluss auf den Code, der in allen Webprojekten im Arbeitsbereich generiert wird. Das heißt, der Schablonenbereich ist arbeitsbereichumfassend.
Arbeitsbereichsposition\.metadata\.plugins\com.ibm.etools.iseries.webtools\
Wenn Sie die Schablonendateien angepasst haben, löschen Sie die entsprechenden Aktionsklassen, bevor Sie den Assistenten für Webinteraktion mit den Änderungen in den Schablonendateien ausführen.
Das folgende Beispiel zeigt einen Abschnitt der Datei iseriesPgmCallAction.template. Schlüsselwörter sind durch das Zeichen # gekennzeichnet, Benutzerkommentare durch die Zeichen ##.#PACKAGE ## z. B. Paket com.ibm.userwebapp.actions; ##============================================================ ## Schablonendatei für die Generierung von Aktionsklassen, ## die IBM i-Hostprogramm aufruft. ## #{Schlüsselwort} dienen der Generierung des internen ## dynamischen Codes, der auf dem Assistenten für ## Webinteraktion basiert. ## Schablonenkommentar wird bei der Codegenerierung ignoriert. ##============================================================ /** * Description - Use PCML to call IBM i ILE program */ import java.util.*; import java.io.*; import java.math.*; import java.text.*; import javax.servlet.http.*; import javax.servlet.ServletContext; import org.apache.struts.action.*; import com.ibm.as400.access.*; import com.ibm.iseries.webint.*; import com.ibm.connector2.iseries.pgmcall.*; #IMPORT ## z. B. com.ibm.userwebapp.beans.*; importieren public class ISeriesPgmAction extends ISeriesBaseAction { #DEFINE_CONSTRUCTOR ## z. B. public UserWebAppAction() { super(xmlPath); } public ActionForward #EXECUTE_METHOD_NAME ## Struts 1.0 -> ausführen, Struts 1.1 -> ausführen ( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, ActionServlet actionServlet ) { try { if(!request.isRequestedSessionIdValid()) { return mapping.findForward("session_error"); } else { setActionServlet(actionServlet); preprocessing(request, response, form); HttpSession session = request.getSession(); Object databean = processInput(form, request, session); ArrayList inputPageNames = getInputPages(); if(inputPageNames != null && inputPageNames.siz() > 0) { for(int k=0; k<inputPageNames.siz(); k++) { saveFormToPage(session, (ISeriesActionFormInterface) form, (String)inputPageNames.get(k)); } } Object formBean = getOutputFormBean(); _databean = (ProgramCallRecord) databean; invokeHostProgram(request, _dataBean, form, ISeriesActionFormInterface) formBean); processOutput(databean, formBean, session); if(msgCodeObj != null) { String msgPage = checkAndMapMessages(msgCodeObj, request, form, (ISeriesActionFormInterface) formBean); if(msgPage != null && msgPage.compareTo(getOutputPage())!= 0) { postprocessing(request, form,(ISeriesActionFormInterface) formBean); return mapping.findForward(msgPage); } } ArrayList outputPageNames = getOutputPages(); if(outputPageNames != null && outputPageNames.size() > 0) { for(int k=0; k<outputPageNames.size(); k++) { saveFormToPage(session, (ISeriesActionFormInterface) formBean, (String)outputPageNames.get(k)); } } postprocessing(request, form, (ISeriesActionFormInterface) formBean); if( _bInvalidateSession ) { session.setAttribute( "wdt400.invalidateSession", "true"); session.invalidate(); } if(sFlowCtrl.equals("")) return getForward(mapping, session); else return getForward(sFlowCtrl, mapping, session); } } catch(Exception ex) { handleError(request, response, ex); return mapping.findForward("wdt_error"); } } // Trigger methods Section // These methods represent key processing phases of // the generated Action execute(). // User can potentially extend the classes and override the methods // to specialize their needs. // In general, it is recommended that the derived methods to invoke the // corresponding method in the super class, e.g. super.preprocessing() etc. //----------------------------------------------------------------------------------------- protected void preprocessing(HttpServletRequest request, HttpServletResponse response, ActionForm inputForm ) throws Exception { } protected void invokeHostProgram( HttpServletRequest request, ProgramCallRecord dataBean, ActionForm inputForm, ISeriesActionFormInterface resultsForm ) throws WebIntRuntimeException { } protected void postprocessing( HttpServletRequest request, ActionForm inputForm, ISeriesActionFormInterface resultsForm ) { } // Helper methods Section //-----------------------------------------------------------------------------