1

いくつかの ajax 呼び出しを使用しているため、RequestController(@ManagedBean および @ViewScoped) ビュー スコープがあります。

結果を含む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");
    }

このオブジェクトにはリクエストの詳細があるため、ビューからアクセスする必要があります。

4

1 に答える 1

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} 
于 2012-05-29T18:18:04.567 に答える