Is this correct? doEdit() redirects to default page instead
gruenewa Jul 13, 2005 7:21 AMHi,
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>