3 Replies Latest reply on Aug 16, 2005 7:18 AM by Daniel Miklancic

    Is this correct? doEdit() redirects to default page instead

    Alexander Grünewald Newbie

      Hi,

      i have deployed a portlet that supports the VIEW, EDIT and HELP mode. When applying the EDIT operation i am redirected to the default page of the portal. This causes that i can't see the result's of the EDIT operation. How can I force JBP2 to stay on the same page.

      A second question: Why do i have to reference a portltet instance in *-pages.xml with this cryptic string <instance-ref>advancedportlet.AdvancedPortlet.AdvancedPortletInstance</instance-ref> instead of <instance-ref>AdvancedPortletInstance</instance-ref> as defined in the portlet-instances.xml?

      Here is the portlet code. It is the modified example from the portal book chapter 2.

      package com.portalbook.portlets;
      
      import java.io.IOException;
      import java.io.Writer;
      
      import javax.portlet.ActionRequest;
      import javax.portlet.ActionResponse;
      import javax.portlet.GenericPortlet;
      import javax.portlet.PortletException;
      import javax.portlet.RenderRequest;
      import javax.portlet.RenderResponse;
      
      public class AdvancedPortlet extends GenericPortlet
      {
      
       protected void doEdit(
       RenderRequest renderRequest,
       RenderResponse renderResponse)
       throws PortletException, IOException
       {
       renderResponse.setContentType("text/html");
      
       Writer writer = renderResponse.getWriter();
      
       //get the existing parameters to use as defaults.
       String title = renderRequest.getParameter("title");
       String contents = renderRequest.getParameter("contents");
      
       if (title == null)
       {
       title = "";
       }
      
       if (contents == null)
       {
       contents = "";
       }
      
       writer.write("<H1>Portlet Settings</H1>");
       writer.write("<FORM ACTION=");
       writer.write(renderResponse.createActionURL().toString());
       writer.write(">");
      
       writer.write(
       "Title: <INPUT TYPE=text NAME=title VALUE='" + title + "' SIZE=25>");
       writer.write(
       "Contents: <INPUT TYPE=text NAME=contents VALUE= '"
       + contents
       + "' SIZE=25>");
       writer.write("<P>");
       writer.write("<INPUT TYPE=submit>");
       writer.write("</FORM>");
      
       }
      
       protected void doHelp(
       RenderRequest renderRequest,
       RenderResponse renderResponse)
       throws PortletException, IOException
       {
       //return a helpful message
       renderResponse.setContentType("text/html");
      
       Writer writer = renderResponse.getWriter();
       writer.write(
       "This portlet allows you to change its content and title.");
       }
      
       protected void doView(
       RenderRequest renderRequest,
       RenderResponse renderResponse)
       throws PortletException, IOException
       {
       renderResponse.setContentType("text/html");
       Writer writer = renderResponse.getWriter();
       String contents = renderRequest.getParameter("contents");
       if (contents != null)
       {
       writer.write(contents);
       }
       else
       {
       //return the default contents
       writer.write("This is the default portlet contents. To change ");
       writer.write("this message, edit the portlet's settings.");
       }
       }
      
       protected String getTitle(RenderRequest renderRequest)
       {
       String title = renderRequest.getParameter("title");
       if (title != null)
       {
       return title;
       }
       //else return a default title, if we don't have one set yet.
       return "Advanced Portlet";
       }
      
       public void processAction(
       ActionRequest actionRequest,
       ActionResponse actionResponse)
       throws PortletException, IOException
       {
       //check for parameters
       String title = actionRequest.getParameter("title");
       if (title != null)
       {
       actionResponse.setRenderParameter("title", title);
       }
      
       String contents = actionRequest.getParameter("contents");
       if (contents != null)
       {
       actionResponse.setRenderParameter("contents", contents);
       }
       }
      }
      


      Here is portlet.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
       version="1.0"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
       <portlet>
       <description>Advanced Portlet Description</description>
       <portlet-name>AdvancedPortlet</portlet-name>
       <display-name>Advanced Portlet</display-name>
       <portlet-class>com.portalbook.portlets.AdvancedPortlet</portlet-class>
       <expiration-cache>-1</expiration-cache>
       <supports>
       <mime-type>text/html</mime-type>
       <portlet-mode>VIEW</portlet-mode>
       <portlet-mode>EDIT</portlet-mode>
       <portlet-mode>HELP</portlet-mode>
       </supports>
       <supported-locale>en</supported-locale>
       <portlet-info>
       <title>Advanced Portlet</title>
       <short-title>Adv. Portlet</short-title>
       <keywords>Advanced</keywords>
       </portlet-info>
       </portlet>
       </portlet-app>
      


      Here is advanced-pages.xml

      <pages>
       <portal-name>default</portal-name>
       <page>
       <page-name>advancedportlet</page-name>
       <window>
       <window-name>AdvancedPortletWindow</window-name> <instance-ref>advancedportlet.AdvancedPortlet.AdvancedPortletInstance</instance-ref>
       <default>true</default>
       <region>center</region>
       <height>0</height>
       </window>
       </page>
      </pages>
      


      Last but not least portlet-instances.xml
      <?xml version="1.0" standalone="yes"?>
      <instances>
       <instance>
       <instance-name>AdvancedPortletInstance</instance-name>
       <component-ref>AdvancedPortlet</component-ref>
       </instance>
      </instances>