mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
using iframe to manage upload of schemas - allows for calling an action listener once the upload is complete to validate the schema and present an error message inside the form in a pretty way.
added a small helper library for managing uploads without using a page reload. modified uploadfileservlet to return a javascript snippet in the response body if the return-page parameter starts with javascript: git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4578 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -18,6 +18,7 @@ package org.alfresco.web.app.servlet;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -47,7 +48,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
public class UploadFileServlet extends BaseServlet
|
||||
{
|
||||
private static final long serialVersionUID = -5482538466491052873L;
|
||||
private static Log logger = LogFactory.getLog(UploadFileServlet.class);
|
||||
private static final Log logger = LogFactory.getLog(UploadFileServlet.class);
|
||||
|
||||
/**
|
||||
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
|
||||
@@ -68,7 +69,7 @@ public class UploadFileServlet extends BaseServlet
|
||||
return;
|
||||
}
|
||||
|
||||
if (isMultipart == false)
|
||||
if (!isMultipart)
|
||||
{
|
||||
throw new AlfrescoRuntimeException("This servlet can only be used to handle file upload requests, make" +
|
||||
"sure you have set the enctype attribute on your form to multipart/form-data");
|
||||
@@ -85,11 +86,9 @@ public class UploadFileServlet extends BaseServlet
|
||||
|
||||
List<FileItem> fileItems = upload.parseRequest(request);
|
||||
|
||||
Iterator<FileItem> iter = fileItems.iterator();
|
||||
FileUploadBean bean = new FileUploadBean();
|
||||
while(iter.hasNext())
|
||||
for (FileItem item : fileItems)
|
||||
{
|
||||
FileItem item = iter.next();
|
||||
if(item.isFormField())
|
||||
{
|
||||
if (item.getFieldName().equalsIgnoreCase("return-page"))
|
||||
@@ -106,15 +105,13 @@ public class UploadFileServlet extends BaseServlet
|
||||
String filename = item.getName();
|
||||
if (filename != null && filename.length() != 0)
|
||||
{
|
||||
if (logger.isDebugEnabled() == true)
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Processing uploaded file: " + filename);
|
||||
}
|
||||
|
||||
// workaround a bug in IE where the full path is returned
|
||||
// IE is only available for Windows so only check for the Windows path separator
|
||||
int idx = filename.lastIndexOf('\\');
|
||||
|
||||
if (idx == -1)
|
||||
{
|
||||
// if there is no windows path separator check for *nix
|
||||
@@ -131,8 +128,7 @@ public class UploadFileServlet extends BaseServlet
|
||||
bean.setFile(tempFile);
|
||||
bean.setFileName(filename);
|
||||
bean.setFilePath(tempFile.getAbsolutePath());
|
||||
session.setAttribute(FileUploadBean.getKey(uploadId), bean);
|
||||
if (logger.isDebugEnabled() == true)
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Temp file: " + tempFile.getAbsolutePath() +
|
||||
" created from upload filename: " + filename);
|
||||
@@ -140,19 +136,39 @@ public class UploadFileServlet extends BaseServlet
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
session.setAttribute(FileUploadBean.getKey(uploadId), bean);
|
||||
|
||||
if (returnPage == null || returnPage.length() == 0)
|
||||
{
|
||||
throw new AlfrescoRuntimeException("return-page parameter has not been supplied");
|
||||
}
|
||||
|
||||
// finally redirect
|
||||
if (logger.isDebugEnabled() == true)
|
||||
|
||||
if (returnPage.startsWith("javascript:"))
|
||||
{
|
||||
logger.debug("Upload servicing complete, redirecting to: " + returnPage);
|
||||
}
|
||||
returnPage = returnPage.substring("javascript:".length());
|
||||
// finally redirect
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Sending back javascript response " + returnPage);
|
||||
}
|
||||
|
||||
response.sendRedirect(returnPage);
|
||||
final PrintWriter out = response.getWriter();
|
||||
out.println("<html><body><script type=\"text/javascript\">");
|
||||
out.println(returnPage);
|
||||
out.println("</script></body></html>");
|
||||
out.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
// finally redirect
|
||||
if (logger.isDebugEnabled())
|
||||
{
|
||||
logger.debug("Upload servicing complete, redirecting to: " + returnPage);
|
||||
}
|
||||
|
||||
response.sendRedirect(returnPage);
|
||||
}
|
||||
}
|
||||
catch (Throwable error)
|
||||
{
|
||||
|
@@ -465,7 +465,7 @@ public class CreateFormWizard
|
||||
// refresh the current page
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Action handler called when the user wishes to remove an uploaded file
|
||||
*/
|
||||
@@ -488,6 +488,25 @@ public class CreateFormWizard
|
||||
return null;
|
||||
}
|
||||
|
||||
public String validateSchema()
|
||||
{
|
||||
if (this.getSchemaFile() != null)
|
||||
{
|
||||
final FormsService ts = FormsService.getInstance();
|
||||
try
|
||||
{
|
||||
final Document d = ts.parseXML(this.getSchemaFile());
|
||||
final XSModel xsm = SchemaUtil.loadSchema(d);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
final String msg = "unable to parse " + this.getSchemaFileName();
|
||||
this.removeUploadedSchemaFile();
|
||||
Utils.addErrorMessage(msg, e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// Bean Getters and Setters
|
||||
@@ -693,7 +712,6 @@ public class CreateFormWizard
|
||||
final String msg = "unable to parse " + this.getSchemaFileName();
|
||||
this.removeUploadedSchemaFile();
|
||||
Utils.addErrorMessage(msg, e);
|
||||
throw new AlfrescoRuntimeException(msg, e);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
@@ -75,29 +75,29 @@ public class ActionLinkRenderer extends BaseRenderer
|
||||
public void encodeEnd(FacesContext context, UIComponent component) throws IOException
|
||||
{
|
||||
// always check for this flag - as per the spec
|
||||
if (component.isRendered() == true)
|
||||
if (!component.isRendered())
|
||||
{
|
||||
Writer out = context.getResponseWriter();
|
||||
return;
|
||||
}
|
||||
Writer out = context.getResponseWriter();
|
||||
UIActionLink link = (UIActionLink)component;
|
||||
|
||||
UIActionLink link = (UIActionLink)component;
|
||||
|
||||
UIComponent verticalContiner = getVerticalContainer(link);
|
||||
if (verticalContiner != null)
|
||||
{
|
||||
int padding = link.getPadding();
|
||||
UIComponent verticalContiner = getVerticalContainer(link);
|
||||
if (verticalContiner != null)
|
||||
{
|
||||
int padding = link.getPadding();
|
||||
|
||||
if (verticalContiner instanceof UIActions)
|
||||
{
|
||||
padding = ((UIActions)verticalContiner).getVerticalSpacing();
|
||||
}
|
||||
// render as menu item style action link
|
||||
out.write( renderMenuAction(context, link, padding) );
|
||||
}
|
||||
else
|
||||
if (verticalContiner instanceof UIActions)
|
||||
{
|
||||
// render as action link
|
||||
out.write( renderActionLink(context, link) );
|
||||
padding = ((UIActions)verticalContiner).getVerticalSpacing();
|
||||
}
|
||||
// render as menu item style action link
|
||||
out.write( renderMenuAction(context, link, padding) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// render as action link
|
||||
out.write( renderActionLink(context, link) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,6 +190,12 @@ public class ActionLinkRenderer extends BaseRenderer
|
||||
}
|
||||
}
|
||||
|
||||
if (attrs.get("id") != null)
|
||||
{
|
||||
linkBuf.append(" id=\"")
|
||||
.append(attrs.get("id"))
|
||||
.append("\"");
|
||||
}
|
||||
if (attrs.get("style") != null)
|
||||
{
|
||||
linkBuf.append(" style=\"")
|
||||
|
Reference in New Issue
Block a user