Was this debugging statement executed? log.debug("Anadido plugin " + uploadFileName);
On Jan 18, 2008 12:13 AM, Pablo Vázquez Blázquez <[EMAIL PROTECTED]> wrote: > Here I send you my JSP and Action code. > > Yes, when I submit, the new plugin is added (I know it because of my > logs), but I don´t know why I don´t get the result page. > > Thank you. > > PD: I have now tried without struts.multipart.parser, but it doesn´t work. > > ****** JSP ****** > > <jsp:root xmlns="http://www.w3.org/1999/xhtml" > xmlns:jsp="http://java.sun.com/JSP/Page" > xmlns:fmt="http://java.sun.com/jsp/jstl/fmt" > xmlns:c="http://java.sun.com/jsp/jstl/core" > xmlns:s="/struts-tags" > version="2.0"> > > <!-- Tabla con los plugins. Si no hay ninguno, se muestra un mensaje > --> > <table class="pluginsTable" cellspacing="0px" cellpadding="3px" > border="1px"> > <tbody> > <tr> > <td class="tableTitle" colspan="5"> > <fmt:message key="PluginsTable.Title"/> > </td> > </tr> > <tr> > <td class="tableHeader"> > <fmt:message key="PluginsTable.Name"/> > </td> > <td class="tableHeader"> > <fmt:message key="PluginsTable.JarFile"/> > </td> > <td class="tableHeader"> > <fmt:message key="PluginsTable.PluginClass"/> > </td> > <td class="tableHeader"> > <fmt:message key="PluginsTable.Type"/> > </td> > <td class="tableHeader"> > <fmt:message key="PluginsTable.Actions"/> > </td> > </tr> > <c:if test="${empty plugins}"> > <tr> > <td class="tableMessage" colspan="5"> > <fmt:message key="PluginsTable.NoPlugins"/> > </td> > </tr> > </c:if> > <c:forEach items="${plugins}" var="plugin" varStatus="status"> > <!-- stuff --> > </c:forEach> > </tbody> > </table> > > > <!-- Form to add plugin --> > <s:form id="addPluginForm" name="addPluginForm" theme="ajax" > action="AddPlugin" enctype="multipart/form-data" method="post"> > > <div class="field"> > <span class="label"> > <fmt:message key="PluginsTable.File"/>*: > </span> > <span class="entry"> > <s:file name="upload" size="40" > accept="application/java-archive"/> > <span id="errorId" class="errorMessage"> > <s:property value="fieldErrors['upload'][0]" /> > </span> > <span id="errorId" class="errorMessage"> > <s:property value="fieldErrors['uploadContentType'][0]" > /> > </span> > </span> > </div> > > <!-- BOTONES --> > <jsp:directive.include file="FormButtons.jspf"/> > > </s:form> > > </jsp:root> > > > ****** FORMBUTTONS.JSPF**** > > <!-- BUTTONS--> > <div class="button"> > <span class="buttonLeft"> > <s:submit type="button" > targets="configAjaxContent" executeScripts="true" > showLoadingText="false" indicator="indicator" > cssClass="submit"> > <s:param name="value"> > <fmt:message key="Buttons.accept"/> > </s:param> > </s:submit> > </span> > <span class="buttonRight"> > <!-- cancelar --> > <s:url id="CancelUrl" action="CancelConfiguration"/> > <s:submit type="button" targets="configAjaxContent" > showLoadingText="false" cssClass="reset" > href="${CancelUrl}"> > <s:param name="value"> > <fmt:message key="Buttons.cancel"/> > </s:param> > </s:submit> > </span> > </div> > > > > *****ACTION ***** > public class AddPluginAction extends DefaultRequestResponseAction { > > private static final long serialVersionUID = 1516786859681901796L; > > /** > * Logger for this class > */ > private static final Log log = LogFactory.getLog(AddPluginAction.class > ); > > private File upload; > private String uploadContentType; > private String uploadFileName; > > @Override > protected String doExecute() throws Exception { > > clearErrorsAndMessages(); > > Context context = > SessionManager.getRemoteServerContext(getRequest()); > > SchedulerManager facade = > SessionManager.getUserFacadeDelegate(getRequest(), context); > > try { > > byte[] filedata = readInputStream(new FileInputStream(upload)); > > facade.addPlugin(uploadFileName, filedata); > > log.debug("Anadido plugin " + uploadFileName); > > } catch (ConnectException e) { > log.error(e); > throw new InternalErrorException(e); > > } catch (DuplicateInstanceException e) { > log.error(e); > addFieldError("upload", > getText("PluginsTable.File.Duplicate")); > > } catch (FileNotFoundException e) { > log.error(e); > addFieldError("upload", > getText("PluginsTable.File.NotFound")); > > } catch (Exception e) { > log.error(e); > addFieldError("uploadContentType", > getText("ErrorMessages.file.incorrectExtension")); > } > > if (hasErrors()) { > return Action.INPUT; > } > > return Action.SUCCESS; > } > > > /* > * Read an input stream in its entirety into a byte array > */ > private static byte[] readInputStream(InputStream inputStream) > throws IOException { > > .... > > return content; > } > > /** > * Getters/Setters > * @return > */ > > public File getUpload() { > return upload; > } > > > public void setUpload(File upload) { > this.upload = upload; > } > > > public String getUploadContentType() { > return uploadContentType; > } > > > public void setUploadContentType(String uploadContentType) { > this.uploadContentType = uploadContentType; > } > > > public String getUploadFileName() { > return uploadFileName; > } > > > public void setUploadFileName(String uploadFileName) { > this.uploadFileName = uploadFileName; > } > > } > > > > > Dave Newton escribió: > > > --- Pablo Vázquez Blázquez <[EMAIL PROTECTED]> wrote: > > > >> I send you my struts-config.xml file, but it works ok. If I delete my > >> "s:file" from my form, everything works fine. > >> > > > > The error happens after you submit, correct? > > > > I guess I'd want to see the JSP and the action code, then; the > configuration > > seems okay. > > > > Have you tried it without setting the "struts.multipart.parser" > constant? The > > default value of that is "jakarta", not a classname; it's worth a shot, > > anyway. > > > > d. > > > > > >> To see the action involved search: <!-- HERE IS THE PROBLEM --> > >> > >> > >> <?xml version="1.0" encoding="UTF-8" ?> > >> <!DOCTYPE struts PUBLIC > >> "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" > >> "http://struts.apache.org/dtds/struts-2.0.dtd"> > >> > >> <struts> > >> > >> <constant name="struts.enable.DynamicMethodInvocation" > value="false" /> > >> <constant name="struts.devMode" value="true" /> <!-- TODO: cambiar > a > >> false en produccion --> > >> <constant name="struts.action.extension" value="do"/> > >> <constant name="struts.ui.theme" value="simple"/> > >> <constant name="struts.multipart.parser" > >> > >> value="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest > "/> > >> > >> > >> <!-- Internacionalizacion para los tags de struts 2 --> > >> <constant name="struts.custom.i18n.resources" > >> value="admintool.http.view.messages.Messages"/> > >> > >> <include file="struts-default.xml"/> > >> > >> <!-- ===== Paquetes ===== --> > >> <package name="scheduler" extends="struts-default"> > >> > >> <!-- ===== Resultados globales ===== --> > >> <result-types> > >> <result-type name="tiles" > >> class="org.apache.struts2.views.tiles.TilesResult"/> > >> </result-types> > >> > >> <!-- ===== Interceptors ===== --> > >> <interceptors> > >> > >> <interceptor name="session" > >> > >> class="admintool.http.controller.interceptors.SessionInterceptor" /> > >> > >> <interceptor name="login" > >> > >> class="admintool.http.controller.interceptors.AuthenticationInterceptor" > /> > >> > >> <interceptor-stack name="defaultLoginStack"> > >> <interceptor-ref name="exception" /> > >> <interceptor-ref name="alias" /> > >> <interceptor-ref name="servlet-config" /> > >> <interceptor-ref name="session" /> > >> <interceptor-ref name="login" /> > >> <interceptor-ref name="prepare" /> > >> <interceptor-ref name="i18n"/> > >> <interceptor-ref name="chain" /> > >> <interceptor-ref name="model-driven" /> > >> <interceptor-ref name="fileUpload" /> > >> <interceptor-ref name="static-params" /> > >> <interceptor-ref name="params" /> > >> <interceptor-ref name="conversionError" /> > >> <interceptor-ref name="validation" /> > >> <interceptor-ref name="workflow" /> > >> </interceptor-stack> > >> > >> <interceptor-stack name="defaultInsecureStack"> > >> <interceptor-ref name="exception" /> > >> <interceptor-ref name="alias" /> > >> <interceptor-ref name="servlet-config" /> > >> <interceptor-ref name="session" /> > >> <interceptor-ref name="prepare" /> > >> <interceptor-ref name="i18n"/> > >> <interceptor-ref name="chain" /> > >> <interceptor-ref name="model-driven" /> > >> <interceptor-ref name="fileUpload" /> > >> <interceptor-ref name="static-params" /> > >> <interceptor-ref name="params" /> > >> <interceptor-ref name="conversionError" /> > >> <interceptor-ref name="validation" /> > >> <interceptor-ref name="workflow" /> > >> </interceptor-stack> > >> > >> <!-- Sample file upload stack --> > >> <interceptor-stack name="fileUploadStack"> > >> <interceptor-ref name="fileUpload"/> > >> <interceptor-ref name="basicStack"/> > >> </interceptor-stack> > >> > >> </interceptors> > >> > >> <!-- > >> Make the defaultLoginStack the default one used > >> for all actions unless otherwise configured. > >> --> > >> <default-interceptor-ref name="defaultLoginStack" /> > >> > >> <!-- ===== Resultados globales ===== --> > >> <!-- se corresponden con los valores por defecto devueltos por > >> Action (ej: error, login) --> > >> <global-results> > >> <result name="login" > >> type="redirect-action">ShowAuthentication</result> > >> <result name="MainPage" > >> type="redirect-action">Workspace</result> > >> <result > >> name="error">/HTML/tiles/base/InternalError.jspx</result> > >> <result > name="exito">/HTML/tiles/base/SuccessPage.jspx</result> > >> </global-results> > >> > >> <!-- ===== Secciones principales ===== --> > >> <action name="Workspace"> > >> <result type="tiles">.Workspace</result> > >> </action> > >> > >> <action name="Scheduler"> > >> <result type="tiles">.Scheduler</result> > >> </action> > >> > >> <action name="Configuration"> > >> <result type="tiles">.Configuration</result> > >> </action> > >> > >> <!-- ===== Autenticacion ===== --> > >> <!-- Accion que muestra el formulario de autenticacion --> > >> <action name="ShowAuthentication" > >> > >> class="admintool.http.controller.actions.users.ShowAuthenticationAction > "> > >> <interceptor-ref name="defaultInsecureStack"/> > >> <result type="tiles">.Login</result> > >> </action> > >> > >> <!-- Ejecuta la accion de login. Si hay fallos, vuelve a la > >> misma pagina --> > >> <action name="Login" > >> > >> class="admintool.http.controller.actions.users.LoginAction"> > >> <interceptor-ref name="defaultInsecureStack"/> > >> <result name="input" type="tiles">.Login</result> > >> </action> > >> > >> <!-- Cierra la sesion y vuelve a la pagina de login --> > >> <action name="Logout" > >> > >> class="admintool.http.controller.actions.users.LogoutAction"> > >> <interceptor-ref name="defaultInsecureStack"/> > >> </action> > >> > >> <!-- ===== Configuration ===== --> > >> > >> <action name="CancelConfiguration"> > >> > <result>/HTML/tiles/configuration/ConnectionInfo.jspx</result> > >> </action> > >> > >> <action name="ShowChangePassword"> > >> > <result>/HTML/tiles/configuration/ChangePassword.jspx</result> > >> </action> > >> > >> <action name="ChangePassword" > >> > >> > >> > > class=" > admintool.http.controller.actions.configuration.ChangePasswordAction"> > > > >> <result > >> name="input">/HTML/tiles/configuration/ChangePassword.jspx</result> > >> </action> > >> > >> <action name="ShowChangeServer"> > >> > <result>/HTML/tiles/configuration/ChangeServer.jspx</result> > >> </action> > >> > >> <action name="ChangeServer" > >> > >> class=" > admintool.http.controller.actions.configuration.ChangeServerAction"> > >> <result > >> name="input">/HTML/tiles/configuration/ChangeServer.jspx</result> > >> </action> > >> > >> <action name="ShowChangeRemotePort"> > >> > >> <result>/HTML/tiles/configuration/ChangeRemotePort.jspx</result> > >> </action> > >> > >> <action name="ChangeRemotePort" > >> > >> > >> > > class=" > admintool.http.controller.actions.configuration.ChangeRemotePortAction"> > > > >> <result > >> name="input">/HTML/tiles/configuration/ChangeRemotePort.jspx</result> > >> </action> > >> > >> <action name="ShowChangeMail"> > >> <result>/HTML/tiles/configuration/ChangeMail.jspx</result> > >> </action> > >> > >> <action name="ChangeMail" > >> > >> class="admintool.http.controller.actions.configuration.ChangeMailAction > "> > >> <result > >> name="input">/HTML/tiles/configuration/ChangeMail.jspx</result> > >> </action> > >> > >> <action name="ShowChangeThreads"> > >> > >> > > === message truncated === > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >