I have more than 10years of development experience. My expertise is in Java EE technology, object-oriented application development, and use of open source frameworks. In recent years, I mainly worked in development projects of Java EE applications in Weblogic platform with Oracle database. I primarily involved in framework development and architectural design in these projects. Boris is a DZone MVB and is not an employee of DZone and has posted 13 posts at DZone. You can read more from them at their website. View Full User Profile

Injecting Guice managed object into JSF View Scoped bean

01.07.2013
| 2470 views |
  • submit to reddit

In previous post, I demonstrate how to integrate JSF with Guice and MyBatis. However, my friend experiences some problem when he is using view scoped backing bean.
He found that he cannot re-inject the service class after serialization. I have done some tricks to solve this problem.This is simply done by overriding the readObject() and writeObject() method.

The BasePageBean in the previous post is changed as follow:

BasePageBean.java

package org.borislam.view;
 
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.faces.context.Flash;
import javax.servlet.ServletContext;
 
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.ppstation.PpContext;
 
public abstract class BasePageBean  implements Serializable{
 
   private transient Injector injector;
    
    
   public BasePageBean() {}
    
   public Injector getInjector() {
     if(injector == null) {
       ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().
                                        getExternalContext().getContext();
       injector = (Injector)servletContext.getAttribute(Injector.class.getName()); 
     }
     return injector;
   }
   public void setInjector(Injector injector) {
     this.injector = injector;
   }
    
   @PostConstruct
   public void init() {
     getInjector().injectMembers(this);
   }
    
   private void writeObject(ObjectOutputStream stream) throws IOException {
      stream.defaultWriteObject();
      System.out.println("write object...");
   }
 
   private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
      stream.defaultReadObject();
      getInjector().injectMembers(this);
      System.out.println("read object...");
   }
    
    
   public  Flash flashScope (){
   return (FacesContext.getCurrentInstance().getExternalContext().getFlash());
   }
 
 
    
}   
Published at DZone with permission of Boris Lam, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)