javax.annotation.ManagedBean中的@ManagedProperty

时间:2013-12-19 23:05:24

标签: jsf java-ee javabeans facelets

我在使用ManagedBean的faces版本时可以使用ManagedProperty,但是当它的javax.annotation.ManagedBean

时不能使用ManagedProperty
@ManagedBean
@RequestScoped
public class TripListProducer {
   @Inject
   private TripDao tripDao;

   private List<Trip> trips_list;

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

我正在使用javax.annotation.ManagedBean,因为这是我在我的facelet中使用@Produces@Named<h:dataTable var="_trip" value="#{trips}"的唯一方法。如果使用ManagedBean的faces版本,我在facelet中会更好,而不是<h:dataTable var="_trip" value="#{tripListProducer.trip.trip_list}"

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

我尝试使用@ManagedProperty的原因是因为我希望用户能够选择显示仅有效行程或所有行程的列表。我更喜欢使用RESTful网址.com/SkiClub/trips/active.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();
     }
  }

但是活动始终保持默认为true。在我的问题中没有太多关注,但我也觉得我的retrieveAllTripsOrderedByDate中的if语句可能不是最好的方法。

1 个答案:

答案 0 :(得分:0)

您需要在jsf托管bean和(cdi)javabeans之间做出决定。不能在一个bean中混合两种注释类型。

对于@ManagedProperty,请使用omnifaces' @Param注释,这样您就可以使用完整的CDI。