Question

I'm able to use ManagedProperty when using the faces version of ManagedBean, but not when its a javax.annotation.ManagedBean

@ManagedBean
@RequestScoped
public class TripListProducer {
   @Inject
   private TripDao tripDao;

   private List<Trip> trips_list;

   @ManagedProperty(value = "#{param.active}")
   private Boolean active = true;

I'm using the javax.annotation.ManagedBean because that is the only way I was able to use @Produces and @Named with <h:dataTable var="_trip" value="#{trips}" in my facelet. I kind of like that better in the facelet as opposed to <h:dataTable var="_trip" value="#{tripListProducer.trip.trip_list}" if using the faces version of ManagedBean.

@Produces
@Named
public List<Trip> getTrips() {
   return trips_list;
}

And the reason I was trying to use @ManagedProperty because I want the user to be able to choose to display list of active only trips or all trips. I prefer to be using RESTful urls .com/SkiClub/trips/active or .com/SkiClub/index.xhtml?active=false

@PostConstruct
public void retrieveAllTripsOrderedByDate() {
   System.out.println("Active Only? " + active);
  if (active) {
        trips_list = tripDao.findAllActiveOrderedByStartDate();         
     } else {
        trips_list = tripDao.findAllOrderedByStartDate();
     }
  }

But active always stays to the default true. Not to tack on too much in my question, but I also feel that the if statement in my retrieveAllTripsOrderedByDate may not be the best approach.

Was it helpful?

Solution

You need to decide between jsf managed beans and (cdi) javabeans. Can't mix both annotation types in one bean.

For your @ManagedProperty use there's omnifaces' @Param annotation, so you can go full CDI.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top