我有一个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");
}
我需要从我的视图中访问它,因为此对象具有请求详细信息。
答案 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}