1 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages Le JSP DynPages sono un utile strumento, fornito da SAP Netweaver, per una gestione più evoluta di event handling e session management rispetto a quella garantita delle normali JSP e Servlet. Questo documento mostra come creare una JSP DynPage e come gestire event handling e scambio di informazioni con JSP tramite l oggetto request. Il primo passo consiste nel ceare un Portal Application Project e al suo interno una applicazione di tipo JSPDynPage. NWDS - Creazione del progetto iniziale.
2 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages NWDS - Creazione del progetto iniziale. NWDS - Creazione di Portal Application Object. NWDS - Creazione di Portal Application Object JSPDynPage.
3 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages NWDS New JSPDynPage. All interno della finestra Package Explorer possiamo vedere il nuovo progetto (prospettiva Enterprise Portal). Tasto destro del mouse sulla cartella del progetto e seguiamo il percorso: Properties -> Java Build Path -> Add External JARS Aggiungiamo i jars htmlb e com.sap.portal.htmlb_api (quest ultimo presente nei plugins solitamente raggiungibili da C:/Programmi/SAP/IDE/IDE70/eclipse/plugins). Tale operazione è necessaria per aggiungere al progetto le librerie utilizzate dall applicazione. package it.me.videsoft; import com.sapportals.htmlb.*; import com.sapportals.htmlb.enum.*; import com.sapportals.htmlb.event.*; import com.sapportals.htmlb.page.*; import com.sapportals.portal.htmlb.page.*; import com.sapportals.portal.prt.component.*; public class Test extends PageProcessorComponent { public DynPage getpage(){ return new TestDynPage(); public static class TestDynPage extends JSPDynPage{ public void doinitialization(){ public void doprocessafterinput() throws PageException {
4 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages public void doprocessbeforeoutput() throws PageException { IPortalComponentRequest request = (IPortalComponentRequest) this.getrequest(); if(!ok) { request.getnode().putvalue("reqtext", "Benvenuto, sei pregato di eseguire il login."); this.setjspname("outputjsp.jsp"); else { request.getnode().putvalue("reqname", user); this.setjspname("output2jsp.jsp"); //Gestione evento click su pulsante sulla JSP public void onokbutton(event event) throws PageException { ok = true; InputField myinputfield = (InputField) getcomponentbyname("inputname"); if (myinputfield!= null) this.user = myinputfield.getvalueasdatatype().tostring(); private boolean ok = false; private String user = "Utente sconosciuto"; test.java La classe Test estende PageProcessorComponent e si comporta da loader class, esegue il metodo getpage() che ritorna un valore di tipo JSP DynPage. La classe TestDynPage estende JSPDynPage da cui eredita e riscrive i metodi: doinitialization. o Chiamato allo start dell applicazione, solitamente usato per inizializzazione di dati e set up di modelli. doprocessafterinput. o Chiamato quando il client invoca il server attraverso oggetti del layout o più in generale per generazione di un evento. doprocessbeforeoutput. o Chiamato prima che il controllo ritorni al client e gli siano inviati i dati. Ciò che facciamo nello specifico è: utilizzare l oggetto request di tipo IPortalComponentRequest per inviare ad una prima JSP una semplice stringa di testo contenente un messaggio (parametro reqtest); leggere nel metodo onokbutton (intercetta l evento click sulla prima JSP) il valore inviato dal client (il nome dell utente) e inviare, utilizzando di nuovo l oggetto request, il valore ricevuto ad una ulteriore jsp (parametro reqname) che visualizza un messaggio di benvenuto.
5 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages JSP DynPage Event Processing Le jsp utilizzano l oggetto componentrequest per la lettura dei dati inviati dalla DynPage e utilizzano HTMLB di facile comprensione per la gestione del layout e l invio di dati alla DynPage. <%@ page import="com.sapportals.portal.prt.component.*"%> <%@ page import="com.sapportals.portal.prt.component.iportalcomponenturi" %> <%@ page import="com.sapportals.portal.prt.component.iportalcomponentrequest" %> <%@ page import="com.sapportals.portal.prt.pom.nodemode" %> <%@ page import="com.sapportals.portal.prt.event.iportalrequestevent" %> <%@ page import="com.sapportals.portal.prt.component.portalcomponentexception" %> <%@ taglib uri= "taglib" prefix="hbj" %> <hbj:content id="mycontext" > <hbj:page title="pagetitle"> <hbj:form id="myformid" > <hbj:textview id="inserimento nome utente" text="componente portale e JSP #1" design="header1" /> </hbj:form> <% String req_read = "Utente sconosciuto."; try { req_read = componentrequest.getnode().getvalue("reqtext").tostring(); catch (PortalComponentException e) {out.println("exception: " + e + "<BR>"); catch (NullPointerException e1) {out.println("request Null: " + e1 +
6 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages "<BR>"); %> <BR><BR> <%= req_read %> <BR><BR> <hbj:form> <hbj:label id="namelabel" text="nome Utente" design="label" labelfor="inputname" /> <hbj:inputfield id="inputname" type="string" maxlength="20" /> <hbj:button id="buttonok" text="ok" width="50px" tooltip="ok" onclick="onokbutton" design="standard" /> </hbj:form> </hbj:page> </hbj:content> outputjsp.jsp <%@ taglib uri= "taglib" prefix="hbj" %> <hbj:content id="mycontext" > <hbj:page title="pagetitle"> <hbj:form id="myformid" > <hbj:textview id="benvenuto utente" text="componente portale e JSP #2" design="header1" /> <% String nome = "Utente sconosciuto."; try { nome = componentrequest.getnode().getvalue("reqname").tostring(); catch (PortalComponentException e) {out.println("exception: " + e + "<BR>"); catch (NullPointerException e1) {out.println("request Null: " + e1 + "<BR>"); %> <BR><BR> <%= "Benvenuto " + nome + "!" %> </hbj:form> </hbj:page> </hbj:content> output2jsp.jsp All interno del file di configurazione portalapp.xml aggiungiamo le references necessarie per HTMLB e la relativa taglib (servizio offerto dal portale) per l utilizzo dei tag all interno delle jsp.
7 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages <?xml version="1.0" encoding="utf-8"?> <application> <application-config> <property name="privatesharingreference" value="com.sap.portal.htmlb"/> </application-config> <components> <component name="test"> <component-config> <property name="classname" value="it.me.videsoft.test"/> </component-config> <component-profile> <property name="taglib" value="/service/htmlb/taglib/htmlb.tld"/> </component-profile> </component> </components> <services/> </application> portalapp.xml Non resta che creare il PAR ed eseguire l upload sul nostro server (tasto destro del mouse sulla cartella del progetto - > Quick PAR Upload). Creiamo una IView che contenga un oggetto di tipo Componente portale, eseguiamo l anteprima e il risultato che si ottiene è quello mostrato nelle figure seguenti. Creazione di una IView per il componente portale Passo intermedio associazione componente portale alla IView
8 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages riepilogo nuova IView Anteprima output.jsp output2.jsp