Les classes Action et ActionForm générées par l'assistant d'interaction Web IBM® i dépendent du code contenu dans les modèles. Le système propose quatre modèles qui contiennent du contenu statique et dynamique. Le contenu statique peut être modifié et personnalisé. Le contenu dynamique permet à l'assistant d'interaction Web de générer du code selon les paramètres définis dans l'assistant. Les mots clés de cette section commencent par le caractère #. Les mots clés sont réservés à l'assistant d'interaction Web. Vous pouvez personnaliser la section dynamique, mais les mots clés réservés doivent rester dans l'ordre où ils apparaissent. Par ailleurs, vous pouvez ajouter des commentaires à la section en les faisant précéder des caractères ##. Les commentaires utilisateur ne sont pas générés dans le code final.
Chaque modèle affecte le code généré à tous les projets Web de l'espace de travail. En fait, les modèles portent sur l'ensemble de l'espace de travail.
emplacement_espace_travail\.metadata\.plugins\com.ibm.etools.iseries.webtools\
Si vous avez personnalisé les fichiers modèle, supprimez les classes d'actions correspondantes avant de lancer l'assistant d'interaction Web, pour que les modifications apportées aux fichiers modèle soient prises en compte.
L'exemple suivant illustre une partie du fichier iseriesPgmCallAction.template. Les mots clés sont identifiés par le caractère # et les commentaires utilisateur par les caractères ##.#PACKAGE ## e.g. package com.ibm.userwebapp.actions; ##============================================================ ## Template file for the generation of user Action classes ## that invokes IBM i host program. ## #{keyword} are for the internal dynamic code-generation ## based on the Web Interaction Wizard ## Template Comment will be ignored by the code-generation. ##============================================================ /** * 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 ## e.g. import com.ibm.userwebapp.beans.*; public class ISeriesPgmAction extends ISeriesBaseAction { #DEFINE_CONSTRUCTOR ## e.g. public UserWebAppAction() { super(xmlPath); } public ActionForward #EXECUTE_METHOD_NAME ## Struts 1.0 -> perform, Struts 1.1 -> execute ( 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 //-----------------------------------------------------------------------------