customizando o




  JSP         Portlets
                                                                                                       by


                            http://www.flickr.com/photos/dejay181/460664432/in/set-72157594529615566/        1
Monday, November 16, 2009
2
Monday, November 16, 2009
O Liferay possui diversos níveis de
                        customização

                                                Customização
                                                    Liferay




                                                   Extension    Código
                            Plugins
                                                  Environment   Fonte




    Portlets                Temas     Layouts

                                                                         3
Monday, November 16, 2009
Portlets
                            revisão
Monday, November 16, 2009
Criação do
                             portlet

/liferay/liferay-plugins-sdk-5.2.3/portlets $ ./create.sh hello-liferay "Hello Liferay"
Buildfile: build.xml

create:
   [unzip] Expanding: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-sdk-5.2.3/
portlets/portlet.zip into /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-
sdk-5.2.3/portlets/hello-liferay-portlet
   [mkdir] Created dir: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-
sdk-5.2.3/portlets/hello-liferay-portlet/docroot/WEB-INF/tld
    [copy] Copying 6 files to /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-
sdk-5.2.3/portlets/hello-liferay-portlet/docroot/WEB-INF/tld

BUILD SUCCESSFUL
Total time: 6 seconds




                                                                                                5
Monday, November 16, 2009
/liferay/liferay-plugins-sdk-5.2.3/portlets/hello-liferay-portlet $ ant   deploy
 Buildfile: build.xml

 compile:

 merge:
                                                                           Deploy do
   [javac] Compiling 1 source file to /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-
 sdk-5.2.3/portlets/hello-liferay-portlet/docroot/WEB-INF/classes             portlet
 merge:

 war:
   [mkdir] Created dir: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-sdk-5.2.3/dist

 clean-portal-dependencies:
     [zip] Building zip: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-sdk-5.2.3/dist/
 hello-liferay-portlet-5.2.3.1.war

 deploy:
    [copy] Copying 1 file to /liferay/liferay-portal-5.2.3/deploy

 BUILD SUCCESSFUL
 Total time: 24 seconds

                                                                                                        6
Monday, November 16, 2009
Utilização do
                      portlet


                                   7
Monday, November 16, 2009
Importação do
                              projeto do
                                portlet




                                            8
Monday, November 16, 2009
um pacote WAR de portlets contém...




                                    my-portlet.war


Classes + Recursos + Descritor
                                                                  9
Monday, November 16, 2009
Descritores podem ser...

                                Padrões
                                 web.xml
                                portlet.xml



           my-portlet.war   Proprietários
                            liferay-portlet.xml
                            liferay-display.xml
                                                       10
Monday, November 16, 2009
Portlets têm

                            modos
                            definem a função do portlet no instante

                                                                     11
Monday, November 16, 2009
Portlets têm

               estados      definem o tamanho da tela que estão ocupando

                                                                          12
Monday, November 16, 2009
Portlet
           API



                            13
Monday, November 16, 2009
O mais comum, entretanto, é
          o uso da classe
      GenericPortlet, que
   ‘substitui’ o método render
      por outros 3 métódos
     doView, doEdit e doHelp




                                 14
Monday, November 16, 2009
O mais comum, entretanto, é
          o uso da classe
      GenericPortlet, que
   ‘substitui’ o método render
      por outros 3 métódos
     doView, doEdit e doHelp

       Invocado para
      renderização do
      portlet no modo
           View
                                 14
Monday, November 16, 2009
O mais comum, entretanto, é
          o uso da classe
      GenericPortlet, que
   ‘substitui’ o método render
      por outros 3 métódos
     doView, doEdit e doHelp

                             Invocado para
                            renderização do
                            portlet no modo
                                  Edit
                                              14
Monday, November 16, 2009
O mais comum, entretanto, é
          o uso da classe
      GenericPortlet, que
   ‘substitui’ o método render
      por outros 3 métódos
     doView, doEdit e doHelp

                             Invocado para
                            renderização do
                            portlet no modo
                                 Help
                                              14
Monday, November 16, 2009
JSP Portlets
           a forma de portlet mais simples



Monday, November 16, 2009
Nosso portlet...


                             16
Monday, November 16, 2009
...suporta apenas
                             o modo View,
                            através da página
                                  view.jsp




                                                17
Monday, November 16, 2009
Fragmento de
       HTML gerado por
          view.jsp

                            18
Monday, November 16, 2009
19
Monday, November 16, 2009
<portlet>
   <portlet-name>hello-liferay</portlet-name>
   <display-name>Hello Liferay</display-name>
   <portlet-class>com.sample.jsp.portlet.JSPPortlet</portlet-class>
   <init-param>
   	 	 	 <name>view-jsp</name>
   	 	 	 <value>/view.jsp</value>
   </init-param>
   <init-param>
   	 	 	 <name>edit-jsp</name>
   	 	 	 <value>/edit.jsp</value>
   </init-param>
   (...)
   <supports>                                    Vamos
      <mime-type>text/html</mime-type>        acrescentar
      <portlet-mode>view</portlet-mode>        também o
      <portlet-mode>edit</portlet-mode>     suporte o modo
   </supports>
   (...)
                                                  Edit
                                                                 20
Monday, November 16, 2009
<portlet>
   <portlet-name>hello-liferay</portlet-name>
   <display-name>Hello Liferay</display-name>
   <portlet-class>com.sample.jsp.portlet.JSPPortlet</portlet-class>
   <init-param>
   	 	 	 <name>view-jsp</name>
   	 	 	 <value>/view.jsp</value>           Quando mais de
   </init-param>                               um modo é
   <init-param>                              suportado pelo
   	 	 	 <name>edit-jsp</name>              portlet, é preciso
   	 	 	 <value>/edit.jsp</value>             especificá-los
   </init-param>
   (...)
   <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>view</portlet-mode>
      <portlet-mode>edit</portlet-mode>
   </supports>
   (...)
                                                                 21
Monday, November 16, 2009
Criamos a página
                            edit.jsp para o
                             modo Edit do
                                portlet


                                               22
Monday, November 16, 2009
Fazemos o
                            deploy do
                             portlet...




                                          23
Monday, November 16, 2009
Modo Edit
                            habilitado...
                                            24
Monday, November 16, 2009
...e
                            funcionando

                                          25
Monday, November 16, 2009
Geralmente, o modo Edit é utilizado
para se fazer configurações do portlet.
   Logo, façamos algo interessante.



                                     26
Monday, November 16, 2009
Vamos modificar a página
                             edit.jsp para simular um
                              formulário simples de
                                    configuração
                                                        27
Monday, November 16, 2009
Nosso formulário
                            de configurações



                                               28
Monday, November 16, 2009
Evita o conflito de nomes
                               na página do portal
                             (lembre-se que este é apenas um
                                  fragmento de HTML)




                                                               29
Monday, November 16, 2009
Qual URL deverá ser
                            chamada no submit do
                                 formulário?




                                                   29
Monday, November 16, 2009
De fato, não sabemos.
              o portlet é quem tem que nos dizer




                                                   30
Monday, November 16, 2009
A classe GenericPortlet
                            disponibiliza 3 métódos de
                             renderização de portlet
                             doView, doEdit, doHelp
                                ...que são chamados antes do
                                 portlet entrar em um modo
                                          específico



                                                               31
Monday, November 16, 2009
Portanto, vamos modificar o
                            método doEdit para que a
                              URL a ser utilizada pelo
                            formulário de edit.jsp seja
                            previamente disponibilizada
                                                          32
Monday, November 16, 2009
E modificar a página
                            edit.jsp para que a action
                                do formulário seja
                            corretamente configurada

                                                         33
Monday, November 16, 2009
Visualmente,
                nada mudou...


                                34
Monday, November 16, 2009
<form
id="_helloliferay_WAR_helloliferayportlet_INSTANC
E_S6Et_helloForm" 	
action="http://localhost:8080/web/guest/home?
p_p_id=helloliferay_WAR_helloliferayportlet_INSTA
NCE_S6Et&p_p_lifecycle=1&p_p_state=normal&p_p_mod
e=edit&p_p_col_id=column-2&p_p_col_pos=1&p_p_col_
count=2”
method="post">	

Nome: <input type="text" name="username" />	
<input type="submit" value="Salvar" />
                               ...mas a action do
                                  formulário foi
</form>
                                   configurada
                                  corretamente.
                                                    35
Monday, November 16, 2009
Já temos um portlet com
              suporte ao modo Edit.
           Temos um formulário para
             configuração do portlet.
               Só nos resta tratar a
            submissão do formulário
                                       36
Monday, November 16, 2009
Em portlets,
        submit de dados
       são tratados pelo
            método
         processAction()


                            37
Monday, November 16, 2009
Vamos criar alguma
                   lógica no
               processAction()

                                    38
Monday, November 16, 2009
Captura
                            parâmetros da
                              requisição


                                            38
Monday, November 16, 2009
Guarda valor
                              enviado
                                           38
Monday, November 16, 2009
Redireciona
                            portlet para seu
                              modo View
                                               38
Monday, November 16, 2009
39
Monday, November 16, 2009
No método doView, vamos
                               recuperar o valor salvo nas
                            preferências do portlet, e enviá-lo
                                    ao JSP view.jsp
                                                                  40
Monday, November 16, 2009
No JSP do modo View
                            (view.jsp), recuperamos o
                             valor disponibilizado pelo
                                 método doView.
                                                          41
Monday, November 16, 2009
42
Monday, November 16, 2009
Existem técnicas mais avançadas mas,
   com isso, 80% das portlets existentes
   (cadastros) podem ser desenvolvidos
                            http://www.flickr.com/photos/dejay181/395737393/in/set-72157594529615566/   43
Monday, November 16, 2009
It’s up to you!

                            http://www.flickr.com/photos/shutter/105497713/   44
Monday, November 16, 2009
Quer ajuda?
                             o/




                  sea@seatecnologia.com.br
                                             45
Monday, November 16, 2009
Q&A
Monday, November 16, 2009

4. Liferay JSP Portlets

  • 1.
    customizando o JSP Portlets by http://www.flickr.com/photos/dejay181/460664432/in/set-72157594529615566/ 1 Monday, November 16, 2009
  • 2.
  • 3.
    O Liferay possuidiversos níveis de customização Customização Liferay Extension Código Plugins Environment Fonte Portlets Temas Layouts 3 Monday, November 16, 2009
  • 4.
    Portlets revisão Monday, November 16, 2009
  • 5.
    Criação do portlet /liferay/liferay-plugins-sdk-5.2.3/portlets $ ./create.sh hello-liferay "Hello Liferay" Buildfile: build.xml create: [unzip] Expanding: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-sdk-5.2.3/ portlets/portlet.zip into /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins- sdk-5.2.3/portlets/hello-liferay-portlet [mkdir] Created dir: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins- sdk-5.2.3/portlets/hello-liferay-portlet/docroot/WEB-INF/tld [copy] Copying 6 files to /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins- sdk-5.2.3/portlets/hello-liferay-portlet/docroot/WEB-INF/tld BUILD SUCCESSFUL Total time: 6 seconds 5 Monday, November 16, 2009
  • 6.
    /liferay/liferay-plugins-sdk-5.2.3/portlets/hello-liferay-portlet $ ant deploy Buildfile: build.xml compile: merge: Deploy do [javac] Compiling 1 source file to /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins- sdk-5.2.3/portlets/hello-liferay-portlet/docroot/WEB-INF/classes portlet merge: war: [mkdir] Created dir: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-sdk-5.2.3/dist clean-portal-dependencies: [zip] Building zip: /Volumes/Data/Documents/sea/edu/liferay/apps/liferay-plugins-sdk-5.2.3/dist/ hello-liferay-portlet-5.2.3.1.war deploy: [copy] Copying 1 file to /liferay/liferay-portal-5.2.3/deploy BUILD SUCCESSFUL Total time: 24 seconds 6 Monday, November 16, 2009
  • 7.
    Utilização do portlet 7 Monday, November 16, 2009
  • 8.
    Importação do projeto do portlet 8 Monday, November 16, 2009
  • 9.
    um pacote WARde portlets contém... my-portlet.war Classes + Recursos + Descritor 9 Monday, November 16, 2009
  • 10.
    Descritores podem ser... Padrões web.xml portlet.xml my-portlet.war Proprietários liferay-portlet.xml liferay-display.xml 10 Monday, November 16, 2009
  • 11.
    Portlets têm modos definem a função do portlet no instante 11 Monday, November 16, 2009
  • 12.
    Portlets têm estados definem o tamanho da tela que estão ocupando 12 Monday, November 16, 2009
  • 13.
    Portlet API 13 Monday, November 16, 2009
  • 14.
    O mais comum,entretanto, é o uso da classe GenericPortlet, que ‘substitui’ o método render por outros 3 métódos doView, doEdit e doHelp 14 Monday, November 16, 2009
  • 15.
    O mais comum,entretanto, é o uso da classe GenericPortlet, que ‘substitui’ o método render por outros 3 métódos doView, doEdit e doHelp Invocado para renderização do portlet no modo View 14 Monday, November 16, 2009
  • 16.
    O mais comum,entretanto, é o uso da classe GenericPortlet, que ‘substitui’ o método render por outros 3 métódos doView, doEdit e doHelp Invocado para renderização do portlet no modo Edit 14 Monday, November 16, 2009
  • 17.
    O mais comum,entretanto, é o uso da classe GenericPortlet, que ‘substitui’ o método render por outros 3 métódos doView, doEdit e doHelp Invocado para renderização do portlet no modo Help 14 Monday, November 16, 2009
  • 18.
    JSP Portlets a forma de portlet mais simples Monday, November 16, 2009
  • 19.
    Nosso portlet... 16 Monday, November 16, 2009
  • 20.
    ...suporta apenas o modo View, através da página view.jsp 17 Monday, November 16, 2009
  • 21.
    Fragmento de HTML gerado por view.jsp 18 Monday, November 16, 2009
  • 22.
  • 23.
    <portlet> <portlet-name>hello-liferay</portlet-name> <display-name>Hello Liferay</display-name> <portlet-class>com.sample.jsp.portlet.JSPPortlet</portlet-class> <init-param> <name>view-jsp</name> <value>/view.jsp</value> </init-param> <init-param> <name>edit-jsp</name> <value>/edit.jsp</value> </init-param> (...) <supports> Vamos <mime-type>text/html</mime-type> acrescentar <portlet-mode>view</portlet-mode> também o <portlet-mode>edit</portlet-mode> suporte o modo </supports> (...) Edit 20 Monday, November 16, 2009
  • 24.
    <portlet> <portlet-name>hello-liferay</portlet-name> <display-name>Hello Liferay</display-name> <portlet-class>com.sample.jsp.portlet.JSPPortlet</portlet-class> <init-param> <name>view-jsp</name> <value>/view.jsp</value> Quando mais de </init-param> um modo é <init-param> suportado pelo <name>edit-jsp</name> portlet, é preciso <value>/edit.jsp</value> especificá-los </init-param> (...) <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> <portlet-mode>edit</portlet-mode> </supports> (...) 21 Monday, November 16, 2009
  • 25.
    Criamos a página edit.jsp para o modo Edit do portlet 22 Monday, November 16, 2009
  • 26.
    Fazemos o deploy do portlet... 23 Monday, November 16, 2009
  • 27.
    Modo Edit habilitado... 24 Monday, November 16, 2009
  • 28.
    ...e funcionando 25 Monday, November 16, 2009
  • 29.
    Geralmente, o modoEdit é utilizado para se fazer configurações do portlet. Logo, façamos algo interessante. 26 Monday, November 16, 2009
  • 30.
    Vamos modificar apágina edit.jsp para simular um formulário simples de configuração 27 Monday, November 16, 2009
  • 31.
    Nosso formulário de configurações 28 Monday, November 16, 2009
  • 32.
    Evita o conflitode nomes na página do portal (lembre-se que este é apenas um fragmento de HTML) 29 Monday, November 16, 2009
  • 33.
    Qual URL deveráser chamada no submit do formulário? 29 Monday, November 16, 2009
  • 34.
    De fato, nãosabemos. o portlet é quem tem que nos dizer 30 Monday, November 16, 2009
  • 35.
    A classe GenericPortlet disponibiliza 3 métódos de renderização de portlet doView, doEdit, doHelp ...que são chamados antes do portlet entrar em um modo específico 31 Monday, November 16, 2009
  • 36.
    Portanto, vamos modificaro método doEdit para que a URL a ser utilizada pelo formulário de edit.jsp seja previamente disponibilizada 32 Monday, November 16, 2009
  • 37.
    E modificar apágina edit.jsp para que a action do formulário seja corretamente configurada 33 Monday, November 16, 2009
  • 38.
    Visualmente, nada mudou... 34 Monday, November 16, 2009
  • 39.
  • 40.
    Já temos umportlet com suporte ao modo Edit. Temos um formulário para configuração do portlet. Só nos resta tratar a submissão do formulário 36 Monday, November 16, 2009
  • 41.
    Em portlets, submit de dados são tratados pelo método processAction() 37 Monday, November 16, 2009
  • 42.
    Vamos criar alguma lógica no processAction() 38 Monday, November 16, 2009
  • 43.
    Captura parâmetros da requisição 38 Monday, November 16, 2009
  • 44.
    Guarda valor enviado 38 Monday, November 16, 2009
  • 45.
    Redireciona portlet para seu modo View 38 Monday, November 16, 2009
  • 46.
  • 47.
    No método doView,vamos recuperar o valor salvo nas preferências do portlet, e enviá-lo ao JSP view.jsp 40 Monday, November 16, 2009
  • 48.
    No JSP domodo View (view.jsp), recuperamos o valor disponibilizado pelo método doView. 41 Monday, November 16, 2009
  • 49.
  • 50.
    Existem técnicas maisavançadas mas, com isso, 80% das portlets existentes (cadastros) podem ser desenvolvidos http://www.flickr.com/photos/dejay181/395737393/in/set-72157594529615566/ 43 Monday, November 16, 2009
  • 51.
    It’s up toyou! http://www.flickr.com/photos/shutter/105497713/ 44 Monday, November 16, 2009
  • 52.
    Quer ajuda? o/ sea@seatecnologia.com.br 45 Monday, November 16, 2009
  • 53.