protected void modifySearchResultLinkTitle ( SearchResult result , final HttpServletRequest httpServletRequest , final IPortletWindowId portletWindowId ) { // If the title contains a SpEL expression, parse it with the portlet definition in the // evaluation context. if ( result . getType ( ) . size ( ) > 0 && result . getTitle ( ) . contains ( "${" ) ) { final IPortletWindow portletWindow = this . portletWindowRegistry . getPortletWindow ( httpServletRequest , portletWindowId ) ; final IPortletEntity portletEntity = portletWindow . getPortletEntity ( ) ; final IPortletDefinition portletDefinition = portletEntity . getPortletDefinition ( ) ; final SpELEnvironmentRoot spelEnvironment = new SpELEnvironmentRoot ( portletDefinition ) ; try { result . setTitle ( spELService . getValue ( result . getTitle ( ) , spelEnvironment ) ) ; } catch ( SpelParseException | SpelEvaluationException e ) { result . setTitle ( "(Invalid portlet title) - see details in log file" ) ; logger . error ( "Invalid Spring EL expression {} in search result portlet title" , result . getTitle ( ) , e ) ; } } }
Since portlets don t have access to the portlet definition to create a useful search results link using something like the portlet definition s title post - process the link text and for those portlets whose type is present in the substitution set replace the title with the portlet definition s title .