Kyle Joseph Stiemann 7 年之前 - 编辑过的 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 请登录以投票。 以……回复 取消
Eduardo Lundgren 7 年之前 Very nice encapsulation of SPA navigation into JSF portlets. Good job! 请登录以投票。 以……回复 取消 Kyle Joseph Stiemann Eduardo Lundgren 7 年之前 Thanks Eduardo! 请登录以投票。 以……回复 取消
Bruno Basto 7 年之前 Awesome! Good job, Kyle! 请登录以投票。 以……回复 取消 Kyle Joseph Stiemann Bruno Basto 7 年之前 Thanks Bruno, we could not have done it without your help! 请登录以投票。 以……回复 取消
Kyle Joseph Stiemann Bruno Basto 7 年之前 Thanks Bruno, we could not have done it without your help! 请登录以投票。 以……回复 取消
William Gosse 5 年之前 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. 请登录以投票。 以……回复 取消 Kyle Joseph Stiemann William Gosse 5 年之前 - 编辑过的 Hi William, please don't double post. I've answered your question here: https://community.liferay.com/forums/-/message_boards/message/110647104 请登录以投票。 以……回复 取消 William Gosse Kyle Joseph Stiemann 5 年之前 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. 请登录以投票。 以……回复 取消
Kyle Joseph Stiemann William Gosse 5 年之前 - 编辑过的 Hi William, please don't double post. I've answered your question here: https://community.liferay.com/forums/-/message_boards/message/110647104 请登录以投票。 以……回复 取消 William Gosse Kyle Joseph Stiemann 5 年之前 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. 请登录以投票。 以……回复 取消
William Gosse Kyle Joseph Stiemann 5 年之前 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. 请登录以投票。 以……回复 取消