在jsf视图上检索会话对象

时间:2012-05-29 18:05:15

标签: session jsf

我有一个RequestController(@ ManagedBean和@ViewScoped),它是视图范围的,因为我们正在使用一些ajax调用。

我有一个带有结果的dataTable,每个结果带有一个按钮

<p:commandButton action="#{requestController.requestDetail()}" icon="ui-icon-search" title="Detalhes">
     <f:setPropertyActionListener target="#{requestController.backing.selectedRequestVO}" value="#{order}" />
</p:commandButton>

此方法正在接收我的dataTable的选定对象并在会话中设置,它正在工作,问题是我不知道如何从我的视图中获取此会话对象。

public void requestDetail() throws IOException {
        FacesContext context = FacesContext.getCurrentInstance();
    context.getExternalContext().getSessionMap().put("requestDetail",backing.selectedRequestVO);context.getExternalContext().redirect(context.getExternalContext().getRequestContextPath() + "/views/request/detail.html");
    }

我需要从我的视图中访问它,因为此对象具有请求详细信息。

1 个答案:

答案 0 :(得分:3)

它只能由您自己指定的属性名称提供。

#{requestDetail}

请注意,这不是正确的方法。您应该有另一个会话范围的托管bean,您在视图范围的托管bean中注入@ManagedProperty,然后将请求详细信息设置为其属性。

@ManagedBean
@ViewScoped
public class RequestController {

    @ManagedProperty("#{requestDetail}")
    private RequestDetail requestDetail;

    public String requestDetail() {
        requestDetail.setSelectedRequestVO(backing.getSelectedRequestVO());
        return "/views/request/detail.html?faces-redirect=true";
    }     

    // ...
}

@ManagedBean
@SessionScoped
public class RequestDetail {

    private RequestVO selectedRequestVO;

    // ...
}

然后您可以按如下方式访问

#{requestDetail.selectedRequestVO}