diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/action/ImportContentletsAction.java b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/action/ImportContentletsAction.java index 5516572e96fa..374cc35a86c3 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/action/ImportContentletsAction.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/contentlet/action/ImportContentletsAction.java @@ -15,6 +15,7 @@ import com.dotmarketing.business.CacheLocator; import com.dotmarketing.cache.FieldsCache; import com.dotmarketing.db.HibernateUtil; +import com.dotmarketing.business.DotStateException; import com.dotmarketing.exception.DotHibernateException; import com.dotmarketing.portal.struts.DotPortletAction; import com.dotmarketing.portlets.contentlet.action.ImportAuditUtil.ImportAuditResults; @@ -376,13 +377,29 @@ private void _downloadCSVTemplate(ActionRequest req, ActionResponse res, Portlet ActionResponseImpl resImpl = (ActionResponseImpl)res; HttpServletResponse httpRes = resImpl.getHttpServletResponse(); + ImportContentletsForm importForm = (ImportContentletsForm) form; + if (!UtilMethods.isSet(importForm.getStructure())) { + SessionMessages.add(req, ERROR, "structure-type-is-required"); + setForward(req, PORTLET_EXT_CONTENTLET_IMPORT_CONTENTLETS); + return; + } + + // The fields must be resolved before any download header is committed, otherwise a + // failed lookup leaves the response flagged as an attachment with an empty error body + final List fields; + try { + fields = FieldsCache.getFieldsByStructureInode(importForm.getStructure()); + } catch (final DotStateException e) { + Logger.warn(this, "Unable to generate CSV template: selected Content Type does not exist", e); + SessionMessages.add(req, ERROR, "Workflow-does-not-exists-content-type"); + setForward(req, PORTLET_EXT_CONTENTLET_IMPORT_CONTENTLETS); + return; + } + httpRes.setContentType("application/octet-stream"); httpRes.setHeader("Content-Disposition", "attachment; filename=\"CSV_Template.csv\""); ServletOutputStream out = httpRes.getOutputStream(); - ImportContentletsForm importForm = (ImportContentletsForm) form; - - List fields = FieldsCache.getFieldsByStructureInode(importForm.getStructure()); for(int i = 0; i < fields.size(); i++) { Field field = fields.get(i); if (ImportUtil.isImportableField(field)) { diff --git a/dotCMS/src/main/webapp/html/portlet/ext/contentlet/import_contentlets.jsp b/dotCMS/src/main/webapp/html/portlet/ext/contentlet/import_contentlets.jsp index 03da207db08f..8b3f44d865ef 100644 --- a/dotCMS/src/main/webapp/html/portlet/ext/contentlet/import_contentlets.jsp +++ b/dotCMS/src/main/webapp/html/portlet/ext/contentlet/import_contentlets.jsp @@ -127,6 +127,11 @@ } function downloadCSVExample() { + var structureInode = dijit.byId("structuresSelect").attr('value'); + if (!structureInode) { + showDotCMSSystemMessage('<%= UtilMethods.escapeSingleQuotes(LanguageUtil.get(pageContext, "structure-type-is-required")) %>', true); + return; + } var href = ''; href += ''; href += '';