You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@rave.apache.org by Jasha Joachimsthal <j....@onehippo.com> on 2011/11/03 13:55:57 UTC

Portal preferences set by admin

Hi,

in the design of the admin interface there's also a tab for portal wide
preferences. The admin can change things like
- the title suffix for each page (" - Rave" will then be replaced by " -
ACME University")
- the number of items on a page in the widget store (or any other pageable
list)
- company logo
etc etc

We could create some base controller with a "getPortalSettings" that calls
some PortalSettingsService that retrieves settings through a repository
from the db (for each request...). All controllers should then extend this
base controller.
I'm wondering what the cleanest solution would be in Spring MVC or should
my suggestion be the good enough option for the time being?


Jasha Joachimsthal

Europe - Amsterdam - Oosteinde 11, 1017 WT Amsterdam - +31(0)20 522 4466
US - Boston - 1 Broadway, Cambridge, MA 02142 - +1 877 414 4776 (toll free)

www.onehippo.com

RE: Portal preferences set by admin

Posted by "Ciancetta, Jesse E." <jc...@mitre.org>.
I've seen Spring HandlerInterceptor's used in the past for this sort of thing and it's worked out pretty well:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

More specifically -- I've seen a class extending HandlerInterceptorAdapter registered with the DefaultAnnotationHandlerMapping to add common objects to the ModelAndView in the HandlerInterceptorAdapter.postHandle(...) method.

Tony was actually the one who implemented the specific case I'm thinking of for our internal portal -- maybe he could comment further if there are questions on it.

--Jesse

>-----Original Message-----
>From: Jasha Joachimsthal [mailto:j.joachimsthal@onehippo.com]
>Sent: Thursday, November 03, 2011 8:56 AM
>To: rave-dev@incubator.apache.org
>Subject: Portal preferences set by admin
>
>Hi,
>
>in the design of the admin interface there's also a tab for portal wide
>preferences. The admin can change things like
>- the title suffix for each page (" - Rave" will then be replaced by " -
>ACME University")
>- the number of items on a page in the widget store (or any other pageable
>list)
>- company logo
>etc etc
>
>We could create some base controller with a "getPortalSettings" that calls
>some PortalSettingsService that retrieves settings through a repository
>from the db (for each request...). All controllers should then extend this
>base controller.
>I'm wondering what the cleanest solution would be in Spring MVC or should
>my suggestion be the good enough option for the time being?
>
>
>Jasha Joachimsthal
>
>Europe - Amsterdam - Oosteinde 11, 1017 WT Amsterdam - +31(0)20 522 4466
>US - Boston - 1 Broadway, Cambridge, MA 02142 - +1 877 414 4776 (toll free)
>
>www.onehippo.com

Re: Portal preferences set by admin

Posted by Jasha Joachimsthal <j....@onehippo.com>.
Thanks for the snippets!

Jasha

On 3 November 2011 15:52, Carlucci, Tony <ac...@mitre.org> wrote:

> As Jesse mentioned we use a custom HandlerInterceptorAdapter to inject
> common objects into all responses from the controllers.  Here is a brief
> snippet on how it would work:
>
> public class CommonModelHandlerInterceptor extends
> HandlerInterceptorAdapter {
>
>    /****/
>
>    @Autowired
>    public CommonModelHandlerInterceptor(UserService userService,
> PortalSettingsService portalSettingsService) {
>        /****/
>    }
>
>    @Override
>    public void postHandle(HttpServletRequest request, HttpServletResponse
> response, Object handler, ModelAndView modelAndView) throws Exception {
>        if (modelAndView != null) {
>            ModelMap map = modelAndView.getModelMap();
>            map.addAttribute(ModelKeys.AUTHENTICATED_USER,
> userService.getCurrentAuthenticatedUser());
>            map.addAttribute(ModelKeys.PORTAL_SETTINGS_MAP,
> portalSettingsService.getAllPortalSettings());
>        }
>
>
>        super.postHandle(request, response, handler, modelAndView);
>    }
> }
>
> then in dispatcher-servlet.xml add:
>
> <bean
> class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
>        <property name="interceptors">
>            <list>
>                <ref bean="commonModelHandlerInterceptor"/>
>            </list>
>        </property>
> </bean>
>
> Viola!  You've now injected any common objects into the Spring ModelAndMap
> object returned by all controllers.
>
> ---
> Anthony Carlucci | SW App Dev Eng, Sr. | R501 / KW App Development & Maint
> e: acarlucci@mitre.org | v: 781.271.2432 | f: 781.271.3299
> The MITRE Corporation | 202 Burlington Rd | Bedford, MA 01730-1420
>
> -----Original Message-----
> From: Ciancetta, Jesse E. [mailto:jcian@mitre.org]
> Sent: Thursday, November 03, 2011 10:21 AM
> To: rave-dev@incubator.apache.org
> Subject: RE: Portal preferences set by admin
>
> I've seen Spring HandlerInterceptor's used in the past for this sort of
> thing and it's worked out pretty well:
>
>
> http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor
>
> More specifically -- I've seen a class extending HandlerInterceptorAdapter
> registered with the DefaultAnnotationHandlerMapping to add common objects
> to the ModelAndView in the HandlerInterceptorAdapter.postHandle(...) method.
>
> Tony was actually the one who implemented the specific case I'm thinking
> of for our internal portal -- maybe he could comment further if there are
> questions on it.
>
> --Jesse
>
> >-----Original Message-----
> >From: Jasha Joachimsthal [mailto:j.joachimsthal@onehippo.com]
> >Sent: Thursday, November 03, 2011 8:56 AM
> >To: rave-dev@incubator.apache.org
> >Subject: Portal preferences set by admin
> >
> >Hi,
> >
> >in the design of the admin interface there's also a tab for portal wide
> >preferences. The admin can change things like
> >- the title suffix for each page (" - Rave" will then be replaced by " -
> >ACME University")
> >- the number of items on a page in the widget store (or any other pageable
> >list)
> >- company logo
> >etc etc
> >
> >We could create some base controller with a "getPortalSettings" that calls
> >some PortalSettingsService that retrieves settings through a repository
> >from the db (for each request...). All controllers should then extend this
> >base controller.
> >I'm wondering what the cleanest solution would be in Spring MVC or should
> >my suggestion be the good enough option for the time being?
> >
> >
> >Jasha Joachimsthal
> >
> >Europe - Amsterdam - Oosteinde 11, 1017 WT Amsterdam - +31(0)20 522 4466
> >US - Boston - 1 Broadway, Cambridge, MA 02142 - +1 877 414 4776 (toll
> free)
> >
> >www.onehippo.com
>
>

RE: Portal preferences set by admin

Posted by "Carlucci, Tony" <ac...@mitre.org>.
As Jesse mentioned we use a custom HandlerInterceptorAdapter to inject common objects into all responses from the controllers.  Here is a brief snippet on how it would work:

public class CommonModelHandlerInterceptor extends HandlerInterceptorAdapter {   

    /****/

    @Autowired
    public CommonModelHandlerInterceptor(UserService userService, PortalSettingsService portalSettingsService) {
        /****/
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {      
        if (modelAndView != null) {
            ModelMap map = modelAndView.getModelMap();            
            map.addAttribute(ModelKeys.AUTHENTICATED_USER, userService.getCurrentAuthenticatedUser());
            map.addAttribute(ModelKeys.PORTAL_SETTINGS_MAP, portalSettingsService.getAllPortalSettings());
        }
       

        super.postHandle(request, response, handler, modelAndView);
    }
}

then in dispatcher-servlet.xml add:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="commonModelHandlerInterceptor"/>
            </list>
        </property>
</bean>            

Viola!  You've now injected any common objects into the Spring ModelAndMap object returned by all controllers.

---
Anthony Carlucci | SW App Dev Eng, Sr. | R501 / KW App Development & Maint
e: acarlucci@mitre.org | v: 781.271.2432 | f: 781.271.3299
The MITRE Corporation | 202 Burlington Rd | Bedford, MA 01730-1420

-----Original Message-----
From: Ciancetta, Jesse E. [mailto:jcian@mitre.org] 
Sent: Thursday, November 03, 2011 10:21 AM
To: rave-dev@incubator.apache.org
Subject: RE: Portal preferences set by admin

I've seen Spring HandlerInterceptor's used in the past for this sort of thing and it's worked out pretty well:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

More specifically -- I've seen a class extending HandlerInterceptorAdapter registered with the DefaultAnnotationHandlerMapping to add common objects to the ModelAndView in the HandlerInterceptorAdapter.postHandle(...) method.

Tony was actually the one who implemented the specific case I'm thinking of for our internal portal -- maybe he could comment further if there are questions on it.

--Jesse

>-----Original Message-----
>From: Jasha Joachimsthal [mailto:j.joachimsthal@onehippo.com]
>Sent: Thursday, November 03, 2011 8:56 AM
>To: rave-dev@incubator.apache.org
>Subject: Portal preferences set by admin
>
>Hi,
>
>in the design of the admin interface there's also a tab for portal wide
>preferences. The admin can change things like
>- the title suffix for each page (" - Rave" will then be replaced by " -
>ACME University")
>- the number of items on a page in the widget store (or any other pageable
>list)
>- company logo
>etc etc
>
>We could create some base controller with a "getPortalSettings" that calls
>some PortalSettingsService that retrieves settings through a repository
>from the db (for each request...). All controllers should then extend this
>base controller.
>I'm wondering what the cleanest solution would be in Spring MVC or should
>my suggestion be the good enough option for the time being?
>
>
>Jasha Joachimsthal
>
>Europe - Amsterdam - Oosteinde 11, 1017 WT Amsterdam - +31(0)20 522 4466
>US - Boston - 1 Broadway, Cambridge, MA 02142 - +1 877 414 4776 (toll free)
>
>www.onehippo.com