Java EE 8 By Example
  • Introduction
  • Overview
    • Example Codes
  • JSF 2.3
    • Activating CDI in JSF 2.3
    • Run applications in JSF 2.2 compatible mode
    • CDI alignment
    • CDI compatible @ManagedProperty
    • Inject support in Converter, Validator and Behavor
    • Websocket support
    • UIData improvements
    • Class level bean validation with f:valdiateWholeBean
    • Java 8 DateTime support
    • PostRenderViewEvent: publising events after view is rendered
    • Search expression framework
  • CDI 2.0
    • Java SE support
    • Event Priority
    • Async Events
    • Register Beans dynamicially
    • Configurators and Intercept Producers
  • JPA 2.2
    • Java 8 Datetime support
    • Return Stream based result from Query
    • More CDI Alignments
  • JSON-B 1.0
  • JSON-P 1.1
  • Bean Validation 2.0
  • JAXRS 2.1
    • Async improvements
    • Server Sent Event
    • Reactive Client
  • Java EE Security API 1.0
    • HttpAuthenticationMechanism
    • IdentityStore
    • SecurityContext
  • Servlet 4.0
    • Server Push
    • Runtime Discovery of Servlet Mappings
    • Http Trailer
  • MVC 1.0
    • Getting started with MVC
    • Handling form submission
    • Exception handling and form validation
    • Processing PUT and DELETE methods
    • Page navigation
    • MVC and CDI
    • Security
    • Bean parameter conversion
    • View engine
Powered by GitBook
On this page
  • RedirectScoped
  • MVC Event
  • Source codes

Was this helpful?

  1. MVC 1.0

MVC and CDI

In before posts, we have already use @Inject to inject CDI beans into the Controller class. In fact, MVC embraced CDI internally.

RedirectScoped

There is a new CDI compatible scope named RedirectScoped introduced in MVC 1.0.

A bean annotated with @RedirectScoped annotation can be transferred between two requests, conceptly, it is similar with JSF Flash.

The AlertMessage is an example.

  1. Declare a bean with @RedirectScoped annotation.

     @RedirectScoped
     @Named("flashMessage")
     public class AlertMessage implements Serializable {}
  2. Inject it into a Controller class.

     @Inject
     AlertMessage flashMessage;
  3. Access the bean properties in the view via EL.

     <c:if test="${not empty flashMessage and not empty flashMessage.text}">
         <div class="alert alert-${flashMessage.type} alert-dismissible"
              role="alert">
             <button type="button" class="close" data-dismiss="alert"
                     aria-label="Close">
                 <span aria-hidden="true"><![CDATA[&times;]]></span>
             </button>
             <p>${flashMessage.text}</p>
         </div>
     </c:if>

It is easy to understand the code snippets.

AlertMessage is a RedirectScoped bean, which means it is can be access in current request and the next request. It is named with CDI @Named which indicates it can be accessed in view via EL by name flashMessage.

MVC Event

MVC defined a series of CDI compatible events, with which you can track the MVC request lifecycle.

MVC provides a MvcEvent interface as the base of all events in MVC, there are several specific event implementations.

  • AfterControllerEvent

  • AfterProcessViewEvent

  • BeforeControllerEvent

  • BeforeProcessViewEvent

  • ControllerRedirectEvent

MVC itself will fire these events in the request processing progress, you can observe the events via CDI @Observes.

@ApplicationScoped
public class MvcEventListener {

    @Inject Logger LOGGER;

    private void onControllerMatched(@Observes BeforeControllerEvent event) {
        LOGGER.info(() -> "Controller matched for " + event.getUriInfo().getRequestUri());
    }

    private void onViewEngineSelected(@Observes BeforeProcessViewEvent event) {
        LOGGER.info(() -> "View engine: " + event.getEngine());
    }

    @PostConstruct
    private void init() {
        LOGGER.config(() -> this.getClass().getSimpleName() + " created");
    }
}

Source codes

  1. Clone the codes from my GitHub account.

  2. Open the mvc project in NetBeans IDE.

  3. Run it on Glassfish.

PreviousPage navigationNextSecurity

Last updated 4 years ago

Was this helpful?

After it is deployed and running on Glassfish application server, navigate in browser.

https://github.com/hantsy/ee8-sandbox/
http://localhost:8080/ee8-mvc/mvc/tasks