Kyle Joseph Stiemann 7 Years Ago - Edited This didn't seem to fit in the blog but Inácio Nery (https://github.com/inacionery) also added a nice feature that allows developers to specify how SennaJS will treat resources that they added to the <head> section. As alluded to above, Liferay 7 unloads/removes CSS resources from the <head> section on navigation, but it does not remove <script>s. This is great default functionality because CSS resources can be unloaded but scripts cannot. However Inácio Nery added the ability to change this functionality by allowing developers to customize the data-senna-track attribute of their <head> resources (https://github.com/liferay/liferay-portal/commit/870041f3434c559ea135dc7635799210a004c194). If the developer does not specify a data-senna-track attribute, <script>s and CSS will default to the functionality mentioned above. However, if the developer wants to change this for certain resources, they need only add the data-senna-track attribute to override the default. For example, to ensure that CSS is not unloaded during SennaJS navigation, add data-senna-track="permanent" to your CSS element:<link href="example/example.css" data-senna-track="permanent" /><script>s are not unloaded/removed during navigation (meaning they default to data-senna-track="permanent"), but you can set them to be:<script src="example/example.js" data-senna-track="temporary" />A word of caution, this will not actually unload the objects created by the JS resource. Potentially, this could create duplicate objects and cause problems because SennaJS will not avoid loading a <script> multiple times as it does with data-senna-track="permanent" (the default for <script>s).See the SennaJS docs for more details: http://sennajs.com/docs#trackableresources Please sign in to reply. Reply as... Cancel
Eduardo Lundgren 7 Years Ago Very nice encapsulation of SPA navigation into JSF portlets. Good job! Please sign in to reply. Reply as... Cancel Kyle Joseph Stiemann Eduardo Lundgren 7 Years Ago Thanks Eduardo! Please sign in to reply. Reply as... Cancel
Kyle Joseph Stiemann Eduardo Lundgren 7 Years Ago Thanks Eduardo! Please sign in to reply. Reply as... Cancel
Bruno Basto 7 Years Ago Awesome! Good job, Kyle! Please sign in to reply. Reply as... Cancel Kyle Joseph Stiemann Bruno Basto 7 Years Ago Thanks Bruno, we could not have done it without your help! Please sign in to reply. Reply as... Cancel
Kyle Joseph Stiemann Bruno Basto 7 Years Ago Thanks Bruno, we could not have done it without your help! Please sign in to reply. Reply as... Cancel
William Gosse 5 Years Ago I am seeing an decrease in page loading speed without SennJS so I tried adding the following to my liferay-portlet.xml instead of turning SennaJS of completely: <!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 7.0.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_7_0_0.dtd"> <liferay-portlet-app> <portlet> <portlet-name>packages</portlet-name> <icon>/icon.png</icon> <requires-namespaced-parameters>false</requires-namespaced-parameters> <ajaxable>false</ajaxable> <header-portlet-css>/resources/css/main.css</header-portlet-css> <single-page-application>false</single-page-application> </portlet> <portlet> But it caused the portlet not load and this exception in Liferay: Caused by: com.liferay.portal.kernel.xml.DocumentException: Error on line 12 of document : The content of element type "portlet" must match "(portlet-name,icon?,virtual-path?,struts-path?,parent-struts-path?,configuration-path?,configuration-action-class?,indexer-class*,open-search-class?,scheduler-entry*,portlet-url-class?,friendly-url-mapper-class?,friendly-url-mapping?,friendly-url-routes?,url-encoder-class?,portlet-data-handler-class?,staged-model-data-handler-class*,template-handler?,portlet-layout-listener-class?,poller-processor-class?,pop-message-listener-class?,social-activity-interpreter-class*,social-request-interpreter-class?,user-notification-definitions?,user-notification-handler-class*,webdav-storage-token?,webdav-storage-class?,xml-rpc-method-class?,application-type*,control-panel-entry-category?,control-panel-entry-weight?,control-panel-entry-class?,asset-renderer-factory*,atom-collection-adapter*,custom-attributes-display*,permission-propagator?,trash-handler*,workflow-handler*,preferences-company-wide?,preferences-unique-per-layout?,preferences-owned-by-group?,use-default-template?,show-portlet-access-denied?,show-portlet-inactive?,action-url-redirect?,restore-current-view?,maximize-edit?,maximize-help?,pop-up-print?,layout-cacheable?,instanceable?,remoteable?,scopeable?,single-page-application?,user-principal-strategy?,private-request-attributes?,private-session-attributes?,autopropagated-parameters?,requires-namespaced-parameters?,action-timeout?,render-timeout?,render-weight?,ajaxable?,header-portal-css*,header-portlet-css*,header-portal-javascript*,header-portlet-javascript*,footer-portal-css*,footer-portlet-css*,footer-portal-javascript*,footer-portlet-javascript*,css-class-wrapper?,facebook-integration?,add-default-resource?,system?,active?,include?)". Nested exception: The content of element type "portlet" must match "(portlet-name,icon?,virtual-path?,struts-path?,parent-struts-path?,configuration-path?,configuration-action-class?,indexer-class*,open-search-class?,scheduler-entry*,portlet-url-class?,friendly-url-mapper-class?,friendly-url-mapping?,friendly-url-routes?,url-encoder-class?,portlet-data-handler-class?,staged-model-data-handler-class*,template-handler?,portlet-layout-listener-class?,poller-processor-class?,pop-message-listener-class?,social-activity-interpreter-class*,social-request-interpreter-class?,user-notification-definitions?,user-notification-handler-class*,webdav-storage-token?,webdav-storage-class?,xml-rpc-method-class?,application-type*,control-panel-entry-category?,control-panel-entry-weight?,control-panel-entry-class?,asset-renderer-factory*,atom-collection-adapter*,custom-attributes-display*,permission-propagator?,trash-handler*,workflow-handler*,preferences-company-wide?,preferences-unique-per-layout?,preferences-owned-by-group?,use-default-template?,show-portlet-access-denied?,show-portlet-inactive?,action-url-redirect?,restore-current-view?,maximize-edit?,maximize-help?,pop-up-print?,layout-cacheable?,instanceable?,remoteable?,scopeable?,single-page-application?,user-principal-strategy?,private-request-attributes?,private-session-attributes?,autopropagated-parameters?,requires-namespaced-parameters?,action-timeout?,render-timeout?,render-weight?,ajaxable?,header-portal-css*,header-portlet-css*,header-portal-javascript*,header-portlet-javascript*,footer-portal-css*,footer-portlet-css*,footer-portal-javascript*,footer-portlet-javascript*,css-class-wrapper?,facebook-integration?,add-default-resource?,system?,active?,include?)". I really hope you guys are paying attention to this SennaJS issue. I notice that it was the cause of the column toggler issue I was having as well. Please sign in to reply. Reply as... Cancel Kyle Joseph Stiemann William Gosse 5 Years Ago - Edited Hi William, please don't double post. I've answered your question here: https://community.liferay.com/forums/-/message_boards/message/110647104 Please sign in to reply. Reply as... Cancel William Gosse Kyle Joseph Stiemann 5 Years Ago My apologies for the double post but please note the it is an indication of the level of frustration I'm having with this issue. Please sign in to reply. Reply as... Cancel
Kyle Joseph Stiemann William Gosse 5 Years Ago - Edited Hi William, please don't double post. I've answered your question here: https://community.liferay.com/forums/-/message_boards/message/110647104 Please sign in to reply. Reply as... Cancel William Gosse Kyle Joseph Stiemann 5 Years Ago My apologies for the double post but please note the it is an indication of the level of frustration I'm having with this issue. Please sign in to reply. Reply as... Cancel
William Gosse Kyle Joseph Stiemann 5 Years Ago My apologies for the double post but please note the it is an indication of the level of frustration I'm having with this issue. Please sign in to reply. Reply as... Cancel