检索 JSF 视图上的会话对象



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

我有一个带有结果的数据表,每个结果都有一个按钮

<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");
    }

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

它只能通过您自己指定的属性名称使用。

#{requestDetail}

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

@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} 

最新更新