1

我有一个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");
    }

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

4

1 回答 1

3

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

#{requestDetail}

请注意,这不是正确的方法。您应该有另一个会话范围的托管 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} 
于 2012-05-29T18:18:04.567 回答