Vom IBM i-Assistenten für Webinteraktion generierter Code

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.

Die vier Codeschablonen heißen:
  • iseriesPgmCallAction.template - Für die Generierung von Action-Klassen für die Programmaufrufinteraktionen.
  • iseriesJBAction.template - Für die Generierung von Action-Klassen für Java-Bean-Interaktionen.
  • iseriesNoPgmCallAction.template - Für die Generierung von Action-Klassen, wenn kein Programmaufruf oder keine Java-Bean vorhanden ist.
  • iseriesActionForm.template - Für die Generierung von ActionForm-Klassen für alle im Assistenten für Webinteraktion ausgewählten Optionen.

Jede Schablone hat einen Einfluss auf den Code, der in allen Webprojekten im Arbeitsbereich generiert wird. Das heißt, der Schablonenbereich ist arbeitsbereichumfassend.

Die ursprünglichen Schablonen werden in den Arbeitsbereichsordner kopiert. Dadurch sind die ursprünglichen Schablonen vor dem Überschreiben geschützt. Die Schablonen im Arbeitsbereich verwendet der Assistent für Webinteraktion zum Generieren von Code. Sie dürfen nur die Kopien im Arbeitsbereich an folgenden Positionen anpassen:
Arbeitsbereichsposition\.metadata\.plugins\com.ibm.etools.iseries.webtools\

Beispiel der Schablonendatei iseriesPgmCallAction

Die vom Assistenten für Webinteraktion generierten Action-Klassen werden durch Paketnamen, die .action enthalten, zusammengefasst. Es können fünf Action-Klassen generiert werden:
  • Der Name der Haupt-Action-Klasse ist der Webinteraktionsname plus Action.java.
  • Die IBM i-Helper-Action-Klasse ist ISeriesAction.java.
  • ISeriesPgmAction.java basiert auf iseriesPgmCallAction.template.
  • ISeriesNoPgmAction.java basiert auf iseriesNoPgmCallAction.template.
  • ISeriesJBAction.java basiert auf iseriesJBAction.template.
ISeriesPgmAction.java, ISeriesNoPgmAction.java und ISeriesJBAction.java werden pro Projekt generiert.

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
  //-----------------------------------------------------------------------------

Feedback