在onEventSelect中调用控制器的动作?

时间:2015-12-02 17:13:42

标签: jsf primefaces schedule

我尝试过使用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

0 个答案:

没有答案