Sobre a unidade
O Centro de Educação Profissional do Senac em Juiz de Fora tem ampla oferta de cursos livres. Lá, os alunos podem optar entre as áreas de Artes, Beleza, Comércio, Comunicação, Design, Gestão, Hospitalidade, Idiomas, Informática, Turismo e Saúde. Para as pessoas que buscam o ensino técnico, há cursos em Estética, Segurança do Trabalho e Administração.
Outras opções na unidade são as especializações em MBA e as turmas do Programa Jovem Aprendiz - iniciativa que oferece formação profissional a jovens. Vale destacar, ainda, que a unidade Juiz de Fora é polo de Educação a Distância do Senac.
Desde 1960, essa unidade atende a mais de 50 municípios, entre eles, Além Paraíba, Muriaé, Cataguases, Leopoldina, Guarani, São João Nepomuceno e Ubá.

Programa de gratuidade Senac
Da formação inicial ao nível técnico, com custo zero, o Programa Senac de Gratuidade foi pensado como um instrumento de inclusão produtiva para brasileiros oriundos de família de baixa renda.
A estrutura
No Senac Juiz de Fora você encontra:
• 18 salas convencionais
• acessibilidade na infraestrutura
• 4 laboratórios de informática
• 1 salão de beleza pedagógico com atendimento ao público. Informações: (32) 3690-4700
• 3 laboratórios de estética
• 1 auditório com capacidade para 80 pessoas
• 1 biblioteca pedagógica
• SenacMóvel (carreta-escola)
• Senac na Escola - palestras gratuitas para escolas da rede pública e particular sobre temas variados
• Participação em eventos e ações globais com atendimentos gratuitos realizados pelos alunos em escolas, empresas e outras entidades, oferecendo cortes de cabelos, maquiagem, manicure e pedicure, massagens, entre outros serviços
Visite a unidade e conheça os cursos disponíveis para você!

Notícias relacionadas
Avaliação de nossos alunos
Acompanhe avaliações dos nossos alunos sobre os cursos desta unidade.
Confira abaixo onde estamos localizados e como chegar até a unidade. Através do mapa interativo, você pode traçar rotas, visualizar os arredores e planejar sua visita com facilidade.
Denied access to method or field getAttribute of class org.apache.catalina.core.ApplicationHttpRequest
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign layoutDisplayPageObjectProvid... [in template "70687763866433#20120#33250" at line 21, column 1]
---- 1<#-- Extrai latitude e longitude dos dois formatos de URL do Google Maps --> 2<#function getCoords geolocationUrl> 3 <#if geolocationUrl?contains("!3d") && geolocationUrl?contains("!4d")> 4 <#return { 5 "lat": geolocationUrl?keep_after("!3d")?keep_before("!"), 6 "lng": geolocationUrl?keep_after("!4d")?keep_before("!") 7 } /> 8 <#elseif geolocationUrl?contains("@")> 9 <#local coordsPart = geolocationUrl?keep_after("@") /> 10 <#return { 11 "lat": coordsPart?keep_before(","), 12 "lng": coordsPart?keep_after(",")?keep_before(",") 13 } /> 14 </#if> 15 <#return {"lat": "", "lng": ""} /> 16</#function> 17 18<#-- Conteúdo exibido pela página de exibição (/w/...), quando houver --> 19<#assign currentUnit = {} /> 20<#assign displayArticle = "" /> 21<#assign layoutDisplayPageObjectProvider = (request.getAttribute("LAYOUT_DISPLAY_PAGE_OBJECT_PROVIDER"))! /> 22 23<#if layoutDisplayPageObjectProvider?has_content && layoutDisplayPageObjectProvider.getClassName() == "com.liferay.journal.model.JournalArticle"> 24 <#assign displayArticle = layoutDisplayPageObjectProvider.getDisplayObject() /> 25</#if> 26 27<#-- Alternativa: URL amigável do conteúdo, o trecho depois de /w/ --> 28<#assign currentURL = themeDisplay.getURLCurrent()?keep_before("?") /> 29<#if !displayArticle?has_content && currentURL?contains("/w/")> 30 <#assign urlTitle = currentURL?keep_after_last("/w/")?keep_before("/") /> 31 <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 32 <#assign displayArticle = (JournalArticleLocalService.fetchArticleByUrlTitle(themeDisplay.getScopeGroupId(), urlTitle))!"" /> 33</#if> 34 35<#assign displayGeolocationUrl = "" /> 36<#assign displayCoords = {"lat": "", "lng": ""} /> 37 38<#if displayArticle?has_content> 39 <#assign displayDocXml = saxReaderUtil.read(displayArticle.getContent()) /> 40 <#assign displayGeolocationUrl = displayDocXml.valueOf("//dynamic-element[@field-reference='geolocation']/dynamic-content[@language-id='${locale}']")!"" /> 41 <#if !displayGeolocationUrl?has_content> 42 <#assign displayGeolocationUrl = displayDocXml.valueOf("(//dynamic-element[@field-reference='geolocation']/dynamic-content)[1]")!"" /> 43 </#if> 44 <#assign displayCoords = getCoords(displayGeolocationUrl?trim) /> 45 46 <#if displayCoords.lat?has_content && displayCoords.lng?has_content> 47 <#assign currentUnit = { 48 "id": displayArticle.getResourcePrimKey()?c, 49 "title": displayArticle.getTitle(locale), 50 "lat": displayCoords.lat, 51 "lng": displayCoords.lng, 52 "geolocationUrl": displayGeolocationUrl 53 } /> 54 </#if> 55</#if> 56 57<#if entries?has_content || currentUnit?has_content> 58 <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script> 59 60 <div id="map" style="height: 480px;"></div> 61 62 <script> 63 const allUnitsData = []; 64 const currentUnit = <#if currentUnit?has_content>{ 65 id: "${currentUnit.id}", 66 title: "${currentUnit.title?js_string}", 67 lat: "${currentUnit.lat}", 68 lng: "${currentUnit.lng}", 69 viewURL: window.location.href.split('?')[0], 70 geolocationUrl: "${currentUnit.geolocationUrl?js_string}" 71 }<#else>null</#if>; 72 </script> 73 74 <#-- Collect all units data --> 75 <#list entries as curEntry> 76 <#assign assetRenderer = curEntry.getAssetRenderer() /> 77 <#assign journalArticle = assetRenderer.getArticle() /> 78 <#assign docXml = saxReaderUtil.read(journalArticle.getContent()) /> 79 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, curEntry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) /> 80 <#assign geolocationUrl = docXml.valueOf("//dynamic-element[@field-reference='geolocation']/dynamic-content[@language-id='${locale}']")!"" /> 81 82 <#-- Add unidadeId to viewURL --> 83 <#assign unidadeId = journalArticle.getResourcePrimKey() /> 84 <#assign viewURL = viewURL?keep_before_last("?") /> 85 <#if viewURL?contains("?")> 86 <#assign viewURL = viewURL + "&unidadeId=" + unidadeId /> 87 <#else> 88 <#assign viewURL = viewURL + "?unidadeId=" + unidadeId /> 89 </#if> 90 91 <#assign coords = getCoords(geolocationUrl) /> 92 <#assign lat = coords.lat /> 93 <#assign lng = coords.lng /> 94 95 <#if lat?has_content && lng?has_content> 96 <script> 97 allUnitsData.push({ 98 id: "${unidadeId}", 99 title: "${curEntry.getTitle(locale)?js_string}", 100 lat: "${lat}", 101 lng: "${lng}", 102 viewURL: "${viewURL?js_string}", 103 geolocationUrl: "${geolocationUrl?js_string}" 104 }); 105 </script> 106 </#if> 107 </#list> 108 109 <script> 110 // Function to initialize map with units 111 async function initMap(unitsToShow) { 112 if (unitsToShow.length === 0) return; 113 114 const map = L.map('map').setView([unitsToShow[0].lat, unitsToShow[0].lng], 13); 115 const customIcon = L.icon({ 116 iconUrl: '${themeDisplay.getPathThemeImages()}/marker-icon.png', 117 iconSize: [42, 64], 118 iconAnchor: [22, 94], 119 popupAnchor: [0, -90] 120 }); 121 122 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 123 attribution: '© OpenStreetMap contributors' 124 }).addTo(map); 125 126 const group = L.featureGroup(); 127 128 unitsToShow.forEach(unit => { 129 const showDetailsButton = unitsToShow.length > 1; 130 131 const popupContent = ` 132 <div class="d-flex justify-content-between align-items-center"> 133 <h4 class="font-weight-bold text-primary mb-0">` + unit.title + `</h4> 134 <a 135 class="btn btn-link text-primary-1-100 p-0" 136 href="` + unit.geolocationUrl + `" 137 target="_blank" 138 rel="noopener noreferrer" 139 > 140 Ver no mapa 141 </a> 142 </div> 143 ` + (showDetailsButton ? ` 144 <a 145 class="btn btn-primary text-white btn-block mt-3" 146 href="` + unit.viewURL + `" 147 target="_blank" 148 > 149 Ver detalhes da unidade 150 </a> 151 ` : '') + ` 152 `; 153 L.marker([unit.lat, unit.lng], { icon: customIcon }) 154 .bindPopup(popupContent) 155 .addTo(group); 156 }); 157 158 group.addTo(map); 159 map.fitBounds(group.getBounds()); 160 } 161 162 // Get unidadeId from URL 163 const urlParams = new URLSearchParams(window.location.search); 164 const unidadeIdFromUrl = urlParams.get('unidadeId'); 165 166 // Main initialization 167 async function init() { 168 // Página de exibição: usa a geolocalização do próprio conteúdo exibido 169 if (currentUnit) { 170 initMap([currentUnit]); 171 } else if (unidadeIdFromUrl) { 172 // Try to fetch specific unit from Headless API 173 try { 174 const response = await fetch( 175 window.location.origin + '/o/headless-delivery/v1.0/structured-contents/' + unidadeIdFromUrl, 176 { 177 method: 'GET', 178 headers: { 179 'Accept': 'application/json' 180 } 181 } 182 ); 183 184 if (response.ok) { 185 const unitData = await response.json(); 186 // Extract geolocation from contentFields 187 const geolocationField = unitData.contentFields?.find(f => f.name === 'geolocation'); 188 const geolocationUrl = geolocationField?.contentFieldValue?.data || ''; 189 190 if (geolocationUrl) { 191 // Parse lat/lng from Google Maps URL 192 let lat = '', lng = ''; 193 if (geolocationUrl.includes('!3d') && geolocationUrl.includes('!4d')) { 194 lat = geolocationUrl.split('!3d')[1]?.split('!')[0] || ''; 195 lng = geolocationUrl.split('!4d')[1]?.split('!')[0] || ''; 196 } else if (geolocationUrl.includes('@')) { 197 const coords = geolocationUrl.split('@')[1]?.split(',') || []; 198 lat = coords[0] || ''; 199 lng = coords[1] || ''; 200 } 201 202 if (lat && lng) { 203 const unit = { 204 id: unidadeIdFromUrl, 205 title: unitData.title || '', 206 lat: lat, 207 lng: lng, 208 viewURL: window.location.href.split('?')[0], 209 geolocationUrl: geolocationUrl 210 }; 211 initMap([unit]); 212 return; 213 } 214 } 215 } 216 } catch (error) { 217 console.warn('Error fetching unit from Headless API:', error); 218 } 219 220 // Fallback: filter from local data 221 const filteredUnits = allUnitsData.filter(unit => unit.id === unidadeIdFromUrl); 222 initMap(filteredUnits); 223 } else { 224 // Show all units 225 initMap(allUnitsData); 226 } 227 } 228 229 init(); 230 </script> 231</#if> 