On Jun 23, 2009, at 2:39 PM, Gavin Donald wrote:
Very well spotted with regards to the cmsu:simpleNavigation especially as I never mentioned that. You were correct and by removing the cmsutags then I can move the SiteMesh filter in front of the Magnolia filter.I also worked out that because I had done a clean install, the gzip nodehad come back. Dropping that with the SiteMesh filter running first means that I can now get the decorator to run even if the adminCentral is unusable as the javascript seems to fail to run.One thing I am wondering about is the SiteMesh effect on the ajax calls.I know that in one of the other apps that has an ajax captcha I needed to add a blank decorator to the paths that the captcha uses. Without that it would fail.
Unfortunately I don't think there's a clear url pattern for the ajax calls atm - it's differentiated through a request parameter. Maybe SM can choose a different decorator based on that - isn't that what ParameterDecoratorMapper is for ?
I am unsure what the paths for the ajax calls inmagnolia are. If I knew them I could use a blank decorator for them andthen maybe the decorator would work with the javascript. I have tried mapping the blank decorator to 'website', 'mgnlTreeControl' and '.resources' but it didn't work. As I now have the ability to decorate adminCentral (not working) I cannow compare the layout of the js files as you suggested. They appear tobe identical: When Decorated: --------------- The head contains: /article-admin/.magnolia/pages/javascript.js /article-admin/.magnolia/pages/messages.en.js /article-admin/.resources/admin-js/dialogs/dialogs.js /article-admin/.resources/calendar/skins/aqua/theme.css /article-admin/.resources/calendar/calendar.js /article-admin/.resources/calendar/lang/calendar-en.js /article-admin/.resources/calendar/calendar-setup.js The body contains: 1) A call to new MgnlTextField() 2) Calls to new mgnlTree(...) When undecorated: ----------------- The head contains: /article-admin/.magnolia/pages/javascript.js /article-admin/.magnolia/pages/messages.en.js /article-admin/.resources/admin-js/dialogs/dialogs.js /article-admin/.resources/calendar/skins/aqua/theme.css /article-admin/.resources/calendar/calendar.js /article-admin/.resources/calendar/lang/calendar-en.js /article-admin/.resources/calendar/calendar-setup.js The body contains: 1) A call to new MgnlTextField() 2) Calls to new mgnlTree(...) Grégory Joseph wrote:Hi, On Jun 21, 2009, at 2:23 PM, Gavin Donald wrote:My apologies for the second email but something has just occurred to me. As, when the SM filter is after the Magnolia filter the content managed pages get decorated correctly and it is only AdminCentral that does not get decorated then does it make sense to say that the SM filter should be left after the Magnolia filter? If that is the case then the question is why AdminCentral does not get decorated. Unfortunately there are noerrors as SM does not even appear to get called.What surprises me in this scenario is that regular Magnolia pages wouldbe decorated too. Re: your previous email:What the error message below says, and the stacktrace demonstrates, is that your decorator jsp file is trying to use Magnolia code, while the context is not set. This happens because the decoration happens outsidethe Magnolia filter chain. Remove the cmsu:simpleNavigation usage from your decorator, and this should work. If you need to use Magnolia content in your decorator itself, you probably have no other choice than to setup the SM filter inside theMagnolia filter chain (config:/server/filters); which will in turn meanyou'll probably have to setup bypasses for your other applications in there too. Cheers, -g On Jun 21, 2009, at 2:07 PM, Gavin Donald wrote:Well, I am not sure what has changed but I now have a different problem. The problem I am now seeing was intermittent before but is now continual(I did a clean redeploy). The error (below) happens whenever theSiteMesh filter is placed before the Magnolis filter. If the SiteMeshfilter is put after Magnolia filter then AdminCentral functions perfectly but is undecorated. The error occurs in the method of info.magnolia.context.MgnlContext.AggregationState() which is: public static AggregationState getAggregationState() { final WebContext ctx = getWebContextOrNull(); if (ctx != null) { return ctx.getAggregationState(); } else { throw new IllegalStateException("Can only get the aggregation state within a WebContext."); } }where ctx is null which is because ThreadLocal.get() is returning nullbut to be honest I don't really understand what ThreadLocal.get() actually does. ----- START ERROR ----- 21-Jun-2009 12:48:32 org.apache.catalina.core.ApplicationDispatcher invoke SEVERE: Servlet.service() for servlet jsp threw exception java.lang.IllegalStateException: Can only get the aggregation state within a WebContext. atinfo .magnolia.context.MgnlContext.getAggregationState(MgnlContext.java: 221)atinfo .magnolia.cms.taglibs.Resource.getCurrentActivePage(Resource.java: 89)atinfo .magnolia .cms .taglibs .util.SimpleNavigationTag.doEndTag(SimpleNavigationTag.java:350)atorg .apache .jsp .prosoc_002dview .decorator .decorator_002dprosoc_002dcms_002dpublic_jsp ._jspx_meth_cmsu_005fsimpleNavigation_005f0 (decorator_002dprosoc_002dcms_002dpublic_jsp.java:893)atorg .apache .jsp .prosoc_002dview .decorator .decorator_002dprosoc_002dcms_002dpublic_jsp ._jspService(decorator_002dprosoc_002dcms_002dpublic_jsp.java:312)at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java: 717)atorg .apache .jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 374)atorg .apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 342)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)at javax.servlet.http.HttpServlet.service(HttpServlet.java: 717)atorg .apache .catalina .core .ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:290)atorg .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)atorg .apache .catalina .core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)atorg .apache .catalina .core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java: 535)atorg .apache .catalina .core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)atcom .opensymphony .module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java: 173)atcom .opensymphony .module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java: 158)atcom .opensymphony .module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)atorg .apache .catalina .core .ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:235)atorg .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)atorg .apache .catalina .core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)atorg .apache .catalina .core.StandardContextValve.invoke(StandardContextValve.java:191)atorg .apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)atorg .apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atorg .apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 568)atorg .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109)atorg .apache .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)atorg .apache.coyote.http11.Http11Processor.process(Http11Processor.java: 845)atorg.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583)atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447)at java.lang.Thread.run(Thread.java:619)21-Jun-2009 12:48:32 org.apache.catalina.core.StandardWrapperValve invokeSEVERE: Servlet.service() for servlet default threw exception java.lang.IllegalStateException: Can only get the aggregation state within a WebContext. atinfo .magnolia.context.MgnlContext.getAggregationState(MgnlContext.java: 221)atinfo .magnolia.cms.taglibs.Resource.getCurrentActivePage(Resource.java: 89)atinfo .magnolia .cms .taglibs .util.SimpleNavigationTag.doEndTag(SimpleNavigationTag.java:350)atorg .apache .jsp .prosoc_002dview .decorator .decorator_002dprosoc_002dcms_002dpublic_jsp ._jspx_meth_cmsu_005fsimpleNavigation_005f0 (decorator_002dprosoc_002dcms_002dpublic_jsp.java:893)atorg .apache .jsp .prosoc_002dview .decorator .decorator_002dprosoc_002dcms_002dpublic_jsp ._jspService(decorator_002dprosoc_002dcms_002dpublic_jsp.java:312)at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java: 717)atorg .apache .jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 374)atorg .apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 342)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)at javax.servlet.http.HttpServlet.service(HttpServlet.java: 717)atorg .apache .catalina .core .ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:290)atorg .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)atorg .apache .catalina .core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)atorg .apache .catalina .core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java: 535)atorg .apache .catalina .core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)atcom .opensymphony .module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java: 173)atcom .opensymphony .module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java: 158)atcom .opensymphony .module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)atorg .apache .catalina .core .ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:235)atorg .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)atorg .apache .catalina .core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)atorg .apache .catalina .core.StandardContextValve.invoke(StandardContextValve.java:191)atorg .apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)atorg .apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atorg .apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 568)atorg .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109)atorg .apache .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)atorg .apache.coyote.http11.Http11Processor.process(Http11Processor.java: 845)atorg.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583)atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447)at java.lang.Thread.run(Thread.java:619) ----- END ERROR ----- Grégory Joseph wrote:Hi again,Haaa this is getting frustrating, because I've been willing to integrate Sitemesh and Magnolia ever since I started working with the latter (andhad to abandon previous projects using the former) Hopefully helpful suggestions inline: On Jun 19, 2009, at 1:41 PM, Gavin Donald wrote:Thanks for the additional ideas. I have tried them as far as I couldand could not get it to work. The use case is that the site has several web applications running on it (Apache Roller , MVNForum, Magnolia as well as a custom core thatprovides site specific facilities). The public and admin sections of each of those application is SiteMesh decorated and so it would keepeverything looking the same if the Magnolia AdminCentral was alsodecorated. The decorators also contain the shared navigation sectionsand so if a user enters AdminCentral they loose all the navigationelements that let them easily move between the different applications.Makes a lot of sense.I added the following: Server/filters/bypasses Content-node: sitemesh-decorator data-node: class => info.magnploa.voting.voters.URIStartsWithVoter data-node: pattern: => /prosoc-view/decoratorProviding the typo was only in the email and not in your config, thislooks correct.I have looked at the source in the browser and then called each of theJS files in turn. Non of them are decorated and all are present including the: /.magnolia/pages/javascript.jsI mention that file specifically because when SiteMesh is active and Icall /magnolia/trees/website.html I get an error in the JavaScriptconsole saying that 'MgnlTextField' could not be found. This JavaScript call is called from near the bottom of website.html and the function isdefined in javascript.js.That could indicate what I was suspecting about Sitemesh rearranging thescript tags in the <head> - see below.I have added: <excludes> <pattern>*.js</pattern> </excludes> to the decorators.xml file. You mentioned: "Depending on your decorator/configuration, it might also be that Sitemesh tries to reorganize the script tags, for instance. If I remember correctly from when I used it before, it's sort of its defaultbehaviour, because you'll usually want to insert stuff in the <head>tags. Can you disable that? Or bypass it altogether for the whole /.magnolia and /.resources, for instance ?" but I didn't really understand how to do that.Well - I don't really know either, been quite a while since I used Sitemesh.What I seem to remember is that you could feed it with a page that has, for instance, <script> and <style> tags lying around in the <body> tag, and Sitemesh would nicely rearrange them inside the <head> tag of thepage.If that happens, there might be a few bits and pieces that don't work anymore (typically, inline javascript within the page that would expect to have some methods or object available - if the order of the scriptsis modified, things might start to get hairy) Could you compare the results of an undecorated and decorated /.magnolia/trees/website.html with that in mind ?When I put the SiteMesh filter before the magnolia filter I frequentlyget: MgnlContext is not set for this thread<...>To understand what goes wrong there, we'd need a few more lines of theexception - could you attach a sample to your email, or paste it onnopaste.org ? If your Magnolia instance runs fine on its own (without SM), I can't really see why this would happen with SM --- at least notwithout more details or trying out myself ...If you have any other ideas then I would be happy to try them but as Iam out of things to try then I will probably leave AdminCentral undecorated for now. Thanks for your previous suggestions.Is there a chance we could see your decorator.jsp; maybe it'd remind mea few other things I forgot about SM... Cheers, -g Grégory Joseph wrote:Gavin,Something hit me: your decorator jsp itself might be going through the Magnolia filters (by default, it's mapped to / and with dispatchers on request, forward AND include) - maybe try adding a bypass for it inthe global bypasses at /server/filters/bypasses ? -g On Jun 16, 2009, at 9:55 PM, Gavin Donald wrote:I had the SiteMesh filter after the Magnolia filter but if I moveit in front I get some partial success. The decorator is applied but there is an error: java.lang.IllegalStateException: MgnlContext is not set for this threadand the login screen loads with parts of the decorator applied butmost of it is missing. If I then login I get the following shown in Firefox: Content Encoding ErrorThe page you are trying to view cannot be shown because it uses aninvalid or unsupported form of compression.The page you are trying to view cannot be shown because it uses aninvalid or unsupported form of compression.I have not been successful in turning off compression in Magnolia toseeif that solves this second problem. I have tried to delete the gzipnodes from: Config => server => filters => gzipConfig => server => filters => gzip => bypasses => contentAllowed =>allowed Config => modules => cache =>config => compression => voters =>contentType => allowedBut the content still came out with gzip compression. The server does not have compression enabled so I have no idea where it comes from.Grégory Joseph wrote:Is your sitemesh filter before or after Magnolia's? This might bedue to how requests that end up in the admincentral servlets treat the filterchain - can you try to see if /.magnolia/trees/website.html getsdecorated, for example ? Or a simpler page such as /.magnolia/pages/configuration.html ?The fact that the login form does not get decorated might be due tothefact that sitemesh treats pages differently depending on the http response code ? (i really don't know if it does, just wild guessing)-g On Jun 16, 2009, at 12:39 PM, Gavin Donald wrote:Thanks for taking the time to reply.I am trying to get AdminCentral decorated with SiteMesh. CurrentlyAdminCentral is not decorated at all. I took a look at the source andsee that past the login screen a single iframe is used. However,the login screen does not seem to use frames and it still is not decorated. I added the following to my sitemesh.xml file: <mapperclass = "com .opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper"><param name="decorator" value="prosoc-cms-admin" /> </mapper> Where 'prosoc-cms-admin' is the name of the decorator in the decorator.xml file. My web.xml uses: <filter> <filter-name>sitemesh</filter-name><filter- class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</ filter-class></filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> I am not sure why AdminCentral does not get decorated. Any suggestions are certainly welcome. Grégory Joseph wrote:Hi Gavin, Any specifics on what the problem(s) is/are ? What are you trying to achieve specifically ? I suppose you've noticed the admincentral is built with frames.. and I seem to remember Sitemesh had frame-specific features/configuration, did you check that ? -g On Jun 14, 2009, at 4:56 PM, Gavin Donald wrote:I have added magnolia onto an existing web app so that it cancontrol apart of the site. The site contains other applications as well(blog,forum etc) and so Sitemesh is used for decoration. I have addedSiteMeshto the Magnolia instances and it works perfectly for the 'create'pagesin AdminCentral and also for the public instance. I have not beensuccessful in getting SiteMesh to decorate the actual AdminCentralitself though (either public or author) and can't think of anyreason why. The SiteMesh decorator is simply:<decorator name="prosoc-cms" page="decorator-prosoc- cms.jsp"><pattern>/*</pattern> </decorator> Does anyone have any suggestions or has can say they have successfully managed to decorate AdminCentral? ---------------------------------------------------------------- For list details seehttp://www.magnolia-cms.com/home/community/mailing- lists.htmlTo unsubscribe, E-mail to: <[email protected]> -------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> -------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.htmlTo unsubscribe, E-mail to: <[email protected] >-------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.htmlTo unsubscribe, E-mail to: <[email protected] >-------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.htmlTo unsubscribe, E-mail to: <[email protected] >-------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.htmlTo unsubscribe, E-mail to: <[email protected] >-------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.htmlTo unsubscribe, E-mail to: <user-list-unsubscr...@magnolia- cms.com>-------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> -------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> -------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> -------------------------------------------------------------------------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> ----------------------------------------------------------------
---------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <[email protected]> ----------------------------------------------------------------
