Bonjour a tous !!
Je devellope un forum sous forme de portlet a introduire sur un portail Vignette et déployé sur un serveur d'application WebLogic...
J'ai un enorme problème et mon dernier espoir, c'est vous !!
Voila, quand je réalise un formulaire pour introduire une discution dans le forum, la portlet récupère les argument via la fonction processAction(). Ensuite (si j'ai bien compris), la réponse créé par cette fontion est envoyé a la fonction render(). Mon probleme, est que, bien que le forum envois ses données en POST, le gestionnaire de portlet semble envoyer les données de processAction() à render() en GET... Ce qui fait que, quand le message a envoyer est trop long, IE plante !!! (longueur maximal d'une url sous IE : 2080 environ).
Voila une simple portlet qui illustre ce probleme :
Code :
- package example;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.portlet.ActionRequest;
- import javax.portlet.ActionResponse;
- import javax.portlet.GenericPortlet;
- import javax.portlet.PortletConfig;
- import javax.portlet.PortletException;
- import javax.portlet.PortletURL;
- import javax.portlet.RenderRequest;
- import javax.portlet.RenderResponse;
- public class TestPortlet extends GenericPortlet {
- public TestPortlet()
- {
- }
- public void init(PortletConfig config) throws PortletException
- {
- super.init(config);
- }
- public void processAction(ActionRequest request, ActionResponse response)
- throws PortletException, IOException
- {
- // On recupere les valeurs du formulaires
- String name = request.getParameter("name" );
- String message = request.getParameter("message" );
- // On les remets dans la péponse
- response.setRenderParameter("name", name);
- response.setRenderParameter("message", message);
- }
- public void render(RenderRequest request, RenderResponse response)
- throws PortletException, IOException
- {
- String name = request.getParameter("name" );
- if (name == null)
- name = "Your name";
- String message = request.getParameter("message" );
- if (message == null)
- message = "Here, your message !";
- response.setContentType("text/html" );
- PrintWriter out = response.getWriter();
- out.println("Hello, " + name + ".<br>Your message is :<br>" + message);
- out.println("<br><br>" );
- PortletURL submitUrl = response.createActionURL();
- out.println("<form method='POST' cellspacing='3' cellpadding='3' action='" + submitUrl + "'>" );
- out.println("<table>" );
- out.println("<tr>" );
- out.println("<td>Name:" );
- out.println("</td>" );
- out.println("<td>" );
- out.println("<TEXTAREA name='name' rows='1' cols='100'>" + name + "</TEXTAREA>" );
- //out.println("<input type='text' size='80' name='name' value='" + name + "'>" );
- out.println("</td>" );
- out.println("</tr>" );
- out.println("<tr>" );
- out.println("<td>" );
- out.println("Message:" );
- out.println("</td>" );
- out.println("<td>" );
- out.println("<TEXTAREA name='message' rows='25' cols='100'>" + message + "</TEXTAREA>" );
- //out.println("<input type='text' size='80' name='message' value='" + message + "'>" );
- out.println("</td>" );
- out.println("<tr>" );
- out.println("</table>" );
- out.println("<input type='submit'" );
- out.println("</form>" );
- }
- public void destroy()
- {
- }
- }
|
Cette portlet affiche un champs "nom" et un champ "message"...
Quand le bouton "submit" est activé, les données sont envoyés à processAction() qui les renvoi a render() pour que le nom et le message entré s'affiche avant le formulaire !!
Quand le message dépasse une certaine taille, IE plante (sous FireFox, ça fonctionne, mais je dois bosser sous IE :? ).
Pouir ceux qui veulent tester voici les fichiers de déploiements :
web.xml
Code :
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE web-app
- PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <!-- POUR VIGNETTE -->
- <context-param>
- <param-name>contextPath</param-name>
- <param-value>SimplePortlet</param-value>
- <description>SimplePortlet for test</description>
- </context-param>
- <!-- FIN POUR VIGNETTE -->
- <!-- POUR VIGNETTE -->
- <listener>
- <listener-class>com.vignette.portal.portlet.jsrcontainer.PortletApplicationServletContextListener</listener-class>
- </listener>
- <!-- FIN POUR VIGNETTE -->
- <!-- POUR VIGNETTE -->
- <servlet>
- <servlet-name>PortletCommandServlet</servlet-name>
- <display-name>Portlet Command Servlet</display-name>
- <description>Utilized by VAP to invoke JSR 168 portlets</description>
- <servlet-class>com.vignette.portal.portlet.jsrcontainer.PortletCommandServlet</servlet-class>
- </servlet>
- <!-- FIN POUR VIGNETTE -->
- <!-- POUR VIGNETTE -->
- <servlet-mapping>
- <servlet-name>PortletCommandServlet</servlet-name>
- <url-pattern>/portletCommand/*</url-pattern>
- </servlet-mapping>
- <!-- FIN POUR VIGNETTE -->
-
- </web-app>
|
portlet.xml
Code :
- <?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">
- <portlet>
- <description>SimplePortlet</description>
- <portlet-name>SimplePortlet</portlet-name>
- <display-name>SimplePortlet</display-name>
- <portlet-class>example.TestPortlet</portlet-class>
- <expiration-cache>-1</expiration-cache>
- <supports>
- <mime-type>text/html</mime-type>
- <portlet-mode>VIEW</portlet-mode>
- </supports>
- <portlet-info>
- <title>SimplePortlet</title>
- <short-title>SimplePortlet</short-title>
- <keywords>SimplePortlet</keywords>
- </portlet-info>
- </portlet>
- </portlet-app>
|
Merci beaucoup de votre aide, c'est extremement important !
Message édité par tinico le 04-06-2007 à 10:55:28