如何在两个@ViewScoped bean之间共享数据?

时间:2014-12-26 11:17:10

标签: jsf jsf-2

我正在尝试将id(long)从one.xhtml传递到另一个.xhtml。 这两个支持bean都是@ViewScoped,我试图在它们之间共享长ID。

我收到<f:viewParam/>

的错误
  

com.sun.faces.mgbean.ManagedBeanCreationException:无法创建   托管豆销售订单。发现了以下问题:    - 表达式#{param.foo},request引用的对象的范围比引用的托管bean(saleOrder)范围短。

我有以下代码。

@ManagedBean    
public class InvoiceView{
    private long number;
    // setter getter.
}

@ManagedBean
@ViewScoped
public SearchInvoice{
    private List<InvoiceView> views;
    private InvoiceView selectedView;  // this is coming from <p:dataTable>
}

@ManagedBean
@ViewScoped
public class SaleOrder {

    @ManagedProperty("#{param.foo}")
    private String number;

    @PostConstruct
    public void init(){
       //sysout number;
    }
}

我在searchInvoice.xhtml文件中有以下代码。

    <!-- I have not desclared <f:metadata/> -->
<h:commandButton value="Place Sale Order"
                 action="#{searchInvoice.forwardToSaleOrder}" <!-- this return saleOrder.xhtml string -->
                 rendered="#{not empty searchInvoice.views}">
        <f:viewParam name="foo" value="#{searchInvoice.selectedView.number}" />
</h:commandButton>

1 个答案:

答案 0 :(得分:0)

您可以在销售Order.xhtml中使用<f:viewParam>(JSF 2),它适用于视图范围的bean。 查看this article