Skip to content

Commit

Permalink
Controller mapping does not render page without descriptor #10917 (#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
rymsha authored Feb 19, 2025
1 parent 5d2239c commit bf6efc6
Show file tree
Hide file tree
Showing 25 changed files with 316 additions and 230 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,13 @@ public void setContent( final Content content )
this.content = content;
}

@Deprecated
public PageTemplate getPageTemplate()
{
return pageTemplate;
}

@Deprecated
public void setPageTemplate( final PageTemplate pageTemplate )
{
this.pageTemplate = pageTemplate;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

public abstract class PortalHandlerWorker<T extends WebRequest>
{
protected T request;
protected final T request;

public PortalHandlerWorker( final T request )
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,15 @@ private WebResponse handleRequest( final PortalRequest req )
private PortalResponse executeController( final PortalRequest req )
throws Exception
{
final ControllerScript script = getScript( req.getApplicationKey() );
final ApplicationKey applicationKey = req.getApplicationKey();
final ControllerScript script = getScript( applicationKey );
final PortalResponse res = script.execute( req );

final WebSocketConfig webSocketConfig = res.getWebSocket();
final WebSocketContext webSocketContext = req.getWebSocketContext();
if ( ( webSocketContext != null ) && ( webSocketConfig != null ) )
{
final WebSocketEndpoint webSocketEndpoint = newWebSocketEndpoint( webSocketConfig, script, req.getApplicationKey() );
final WebSocketEndpoint webSocketEndpoint = newWebSocketEndpoint( webSocketConfig, script, applicationKey );
webSocketContext.apply( webSocketEndpoint );
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.enonic.xp.portal.impl.controller;

import com.enonic.xp.app.ApplicationKey;
import com.enonic.xp.portal.PortalRequest;
import com.enonic.xp.portal.PortalRequestAccessor;
import com.enonic.xp.portal.PortalResponse;
Expand All @@ -26,18 +27,20 @@ final class ControllerScriptImpl
}

@Override
public PortalResponse execute( final PortalRequest portalRequest )
public PortalResponse execute( final PortalRequest request )
{
PortalRequestAccessor.set( portalRequest );

final ApplicationKey previousApp = request.getApplicationKey();
request.setApplicationKey( this.scriptExports.getScript().getApplicationKey() );
PortalRequestAccessor.set( request );
try
{
return Tracer.trace( "controllerScript", trace -> trace.put( "script", this.scriptExports.getScript().toString() ),
() -> doExecute( portalRequest ) );
() -> doExecute( request ) );
}
finally
{
PortalRequestAccessor.remove();
request.setApplicationKey( previousApp );
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.enonic.xp.portal.impl.error;

import com.enonic.xp.app.ApplicationKey;
import com.enonic.xp.portal.PortalRequest;
import com.enonic.xp.portal.PortalRequestAccessor;
import com.enonic.xp.portal.PortalResponse;
import com.enonic.xp.portal.impl.controller.PortalResponseSerializer;
Expand All @@ -26,6 +28,9 @@ public PortalResponse execute( final PortalError portalError, final String handl
return null;
}

final PortalRequest request = portalError.getRequest();
final ApplicationKey previousApp = request.getApplicationKey();
request.setApplicationKey( scriptExports.getScript().getApplicationKey() );
PortalRequestAccessor.set( portalError.getRequest() );
try
{
Expand All @@ -35,6 +40,7 @@ public PortalResponse execute( final PortalError portalError, final String handl
finally
{
PortalRequestAccessor.remove();
request.setApplicationKey( previousApp );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,19 +230,7 @@ private PortalResponse renderApplicationCustomError( final ApplicationKey appKey
}

final ErrorHandlerScript errorHandlerScript = this.errorHandlerScriptFactory.errorScript( script );

final PortalRequest request = portalError.getRequest();
final ApplicationKey previousApp = request.getApplicationKey();
// set application of the error handler in the current context PortalRequest
try
{
request.setApplicationKey( appKey );
return errorHandlerScript.execute( portalError, handlerMethod );
}
finally
{
request.setApplicationKey( previousApp );
}
return errorHandlerScript.execute( portalError, handlerMethod );
}

private ResourceKey getScript( final ApplicationKey applicationKey, final String scriptPath )
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.enonic.xp.portal.impl.filter;

import com.enonic.xp.app.ApplicationKey;
import com.enonic.xp.portal.PortalRequest;
import com.enonic.xp.portal.PortalRequestAccessor;
import com.enonic.xp.portal.PortalResponse;
Expand Down Expand Up @@ -35,8 +36,9 @@ final class FilterScriptImpl
@Override
public PortalResponse execute( final PortalRequest request, final WebResponse response, final WebHandlerChain webHandlerChain )
{
final ApplicationKey previousApp = request.getApplicationKey();
request.setApplicationKey( this.scriptExports.getScript().getApplicationKey() );
PortalRequestAccessor.set( request );

try
{
return Tracer.trace( "filterScript", trace -> trace.put( "script", this.scriptExports.getScript().toString() ),
Expand All @@ -55,6 +57,7 @@ public PortalResponse execute( final PortalRequest request, final WebResponse re
finally
{
PortalRequestAccessor.remove();
request.setApplicationKey( previousApp );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ public PortalRequest serialize()
req.setContentPath( sourceRequest.getContentPath() );
req.setContent( sourceRequest.getContent() );
req.setSite( sourceRequest.getSite() );
req.setPageTemplate( sourceRequest.getPageTemplate() );
req.setComponent( sourceRequest.getComponent() );
req.setApplicationKey( sourceRequest.getApplicationKey() );
req.setPageDescriptor( sourceRequest.getPageDescriptor() );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.enonic.xp.context.Context;
import com.enonic.xp.context.ContextAccessor;
import com.enonic.xp.context.ContextBuilder;
import com.enonic.xp.page.Page;
import com.enonic.xp.portal.PortalRequest;
import com.enonic.xp.portal.PortalResponse;
import com.enonic.xp.portal.RenderMode;
Expand Down Expand Up @@ -147,11 +148,18 @@ public WebResponse handle( final WebRequest webRequest, final WebResponse webRes
}
else
{
final PageResolverResult resolvedPage = pageResolver.resolve( request.getMode(), content, site );
final Content effectiveContent = Content.create( content ).page( resolvedPage.getEffectivePage() ).build();
request.setContent( effectiveContent );
request.setApplicationKey( resolvedPage.getApplicationKey() );
request.setPageDescriptor( resolvedPage.getPageDescriptor() );
final PageResolverResult resolvedPage = pageResolver.resolve( content, site != null ? site.getPath() : ContentPath.ROOT );
final Page effectivePage = resolvedPage.getEffectivePage();
if ( effectivePage != null )
{
final Content effectiveContent = Content.create( content ).page( effectivePage ).build();
request.setContent( effectiveContent );
request.setPageDescriptor( resolvedPage.getPageDescriptor() );
}
else
{
request.setContent( content );
}
}

request.setSite( site );
Expand All @@ -164,11 +172,15 @@ public WebResponse handle( final WebRequest webRequest, final WebResponse webRes
{
return handleController( request, mapping );
}

return handleFilter( request, webResponse, webHandlerChain, mapping );
else
{
return handleFilter( request, webResponse, webHandlerChain, mapping );
}
}
else
{
return webHandlerChain.handle( request, webResponse );
}

return webHandlerChain.handle( request, webResponse );
}

private PortalResponse handleController( final PortalRequest portalRequest, final ControllerMappingDescriptor mapping )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public PortalResponse execute()
if ( webSocketContext != null && webSocketConfig != null )
{
final WebSocketEndpoint webSocketEndpoint =
newWebSocketEndpoint( webSocketConfig, this::getScript, request.getApplicationKey() );
newWebSocketEndpoint( webSocketConfig, this::getScript, mappingDescriptor.getController().getApplicationKey() );
webSocketContext.apply( webSocketEndpoint );
}
return portalResponse;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import com.enonic.xp.content.ContentId;
import com.enonic.xp.content.ContentNotFoundException;
import com.enonic.xp.content.ContentService;
import com.enonic.xp.page.DescriptorKey;
import com.enonic.xp.page.Page;
import com.enonic.xp.portal.PortalRequest;
import com.enonic.xp.portal.PortalResponse;
Expand Down Expand Up @@ -56,13 +55,15 @@ public PortalResponse execute()
final ContentResolverResult resolvedContent = contentResolver.resolve( this.request );
final Content content = resolvedContent.getContentOrElseThrow();
final Site site = resolvedContent.getNearestSiteOrElseThrow();
final PageResolverResult resolvedPage = pageResolver.resolve( request.getMode(), content, site );
final PageResolverResult resolvedPage = pageResolver.resolve( content, site.getPath() );

Page effectivePage = resolvedPage.getEffectivePageOrElseThrow( request.getMode() );
Component component = null;

if ( content.getType().isFragment() )
{
// fragment content, try resolving component path in Layout fragment
final Component fragmentComponent = resolvedPage.getEffectivePage().getFragment();
final Component fragmentComponent = effectivePage.getFragment();

if ( this.componentPath.isEmpty() )
{
Expand All @@ -74,29 +75,23 @@ else if ( fragmentComponent instanceof LayoutComponent )
}
}

final Page effectivePage;
if ( component == null )
{
effectivePage = inlineFragments( resolvedPage.getEffectivePage(), this.componentPath );
effectivePage = inlineFragments( effectivePage, this.componentPath );
component = effectivePage.getRegions().getComponent( this.componentPath );
}
else
{
effectivePage = resolvedPage.getEffectivePage();
}

if ( component == null )
{
throw WebException.notFound( String.format( "Page component for [%s] not found", this.componentPath ) );
}

final Content effectiveContent = Content.create( content ).page( effectivePage ).build();
final DescriptorKey controller = resolvedPage.getController();

this.request.setSite( site );
this.request.setContent( effectiveContent );
this.request.setComponent( component );
this.request.setApplicationKey( controller != null ? controller.getApplicationKey() : null );
this.request.setApplicationKey( resolvedPage.getApplicationKey() );

final Trace trace = Tracer.current();
if ( trace != null )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.enonic.xp.content.Content;
import com.enonic.xp.data.Property;
import com.enonic.xp.data.PropertySet;
import com.enonic.xp.page.Page;
import com.enonic.xp.page.PageDescriptorService;
import com.enonic.xp.portal.PortalRequest;
import com.enonic.xp.portal.PortalResponse;
Expand Down Expand Up @@ -58,14 +59,15 @@ public PortalResponse execute()

final Site site = resolvedContent.getNearestSiteOrElseThrow();

final PageResolverResult resolvedPage = pageResolver.resolve( request.getMode(), content, site );
final PageResolverResult resolvedPage = pageResolver.resolve( content, site.getPath() );

final Content effectiveContent = Content.create( content ).page( resolvedPage.getEffectivePage() ).build();
final Page effectivePage = resolvedPage.getEffectivePageOrElseThrow( request.getMode() );
final Content effectiveContent = Content.create( content ).page( effectivePage ).build();

this.request.setSite( site );
this.request.setContent( effectiveContent );
this.request.setApplicationKey( resolvedPage.getApplicationKey() );
this.request.setPageDescriptor( resolvedPage.getPageDescriptor() );
this.request.setApplicationKey( resolvedPage.getApplicationKey() );

final Trace trace = Tracer.current();
if ( trace != null )
Expand Down
Loading

0 comments on commit bf6efc6

Please sign in to comment.