Hi Everyone,

I started investigating a ticket related to forwarding not working in a
Grails controller on 7.0.0-M4.  As part of that I made this discovery:
https://github.com/apache/grails-core/issues/14193#issuecomment-3017157073
 It seems the DispatcherServlet from Spring is designed to handle multiple
calls methods that cause the response to render and close.  The dispatcher
chooses  the right one by the committed state of the response.

>From my investigation, the Sitemesh 3 implementation appears to use a
filter to render its output after the DispatcherServlet is processed - so
the response state is never committed.  I think we could update the
GrailsDispatcherServlet to handle the various scenarios that the
DispatcherServlet handles, but I'm not sure this is practical for Grails 7
given the delays we have already had.  We would also be deviating from how
Spring MVC controllers are rendered and this logic doesn't appear that
simple.  Moreover, we still have several outstanding tickets related to the
sitemesh 3 upgrade:

* Apr 2025 - https://github.com/apache/grails-core/issues/14193 -
forwarding from a controller
* Jan 2025 - https://github.com/apache/grails-core/issues/13988 - nested
layouts
* Feb 2005 - https://github.com/apache/grails-core/issues/14197 - $raw in
titles
* Nov 2024 - https://github.com/apache/grails-core/issues/13849 - layout by
convention

We have reached out to the developer of Sitemesh 3 on most of these tickets
(via ticket comments and direct slack messages over the past few months);
we have yet to receive any work or progress on them. The oldest of which is
8+ months old. I'm skeptical these can be finished in a reasonable time
frame.


Given the lack of support, the multiple issues found by users, and the
current state of Grails 7 being delayed by these tickets, I would like to
propose we revert back to Sitemesh 2.6.0.  Assuming we confirm all of these
issues are fixed, we would only have the remaining license, asset plugin
release, & ASF release related issues to fix before we could release Grails
7.


I have gone ahead and reverted back to Sitemesh 2.6.0 in the issue14193
branch (https://github.com/apache/grails-core/tree/issue14193).  As part of
switching back to v2, I discovered the following is now fixed:
* async rendering
* async error handling
* layout specified by a controller property
* layout specified in controller property applied to a GSP that does not
contain a root html tag

It seems the sitemesh3 upgrade was performed during a time when the project
wasn't running all of its tests, so we are only now learning the scope of
its impact.  I think we can still be open to switching to Sitemesh 3 in
Grails 8.  Especially if we get the necessary support, but otherwise, we
can continue with 2.x.

Please note as part of this branch revert, I've also taken a closer look at
the Sitemesh licensing requirements and made a first pass being compatible
with the Sitemesh license.  We'll still have to follow-up with ASF legal to
ensure we're compliant since the license is a derivative of the ASF
license.

-James

Reply via email to