我尝试过使用primefaces的计划组件,我可以在点击事件时导航:
XHTML:
<p:schedule id="schedule" value="#{myControllerBean.eventModel}">
<p:ajax event="eventSelect" listener="#{pmyControllerBean.onEventSelect}"/>
</p:schedule>
爪哇:
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.LazyScheduleModel;
import org.primefaces.model.ScheduleModel;
public void onEventSelect(SelectEvent selectEvent) {
ConfigurableNavigationHandler cnh =
(ConfigurableNavigationHandler)FacesContext.
getCurrentInstance().getApplication().getNavigationHandler();
cnh.performNavigation("myPage?faces-redirect=true");
}
我的问题是 myPage 实际上应该是从另一个控制器bean调用的方法返回的,该方法接受一个参数(想想实体的详细信息页面):
@Named
@RequestScoped
public class EntityDetails {
private MyEntity entity;
public String getDetail(MyEntity entity) {
this.entity = entity;
return "myPage";
}
}
我也知道如何从onEventSelect中的事件中检索MyEntity对象(我已经将DefaultScheduleEvent扩展为包含它),所以此时它看起来像这样:
public void onEventSelect(SelectEvent selectEvent) {
ConfigurableNavigationHandler cnh =
(ConfigurableNavigationHandler)FacesContext.
getCurrentInstance().getApplication().getNavigationHandler();
MyEntity entity = ((MyEntityEvent)selectEvent.getObject()).getEntity()
cnh.performNavigation("MyPage?faces-redirect=true");
}
我的问题是:如何在onEventSelect中调用并重定向到EntityDetail.getDetails(entity)?
更新:好的,您可以直接使用该方法。但我现在有另一个问题:如果我保留“?faces-redirect = true”,我的详细信息页面根本不显示我的实体的数据。如果我删除它,我会得到正确的数据,但下一个导航(任何导航)会再次进入详细信息页面,但这次没有数据。
@Inject EntityDetails entityDetail;
...
cnh.performNavigation(entityDetails.getDetail(entity) + "?faces-redirect=true"); //no data in the page
cnh.performNavigation(entityDetails.getDetail(entity)); //data present, but the next navigation leads to the details page with no data