从另一个bean调用一个bean并将值设置为bean并从另一个bean显示

时间:2015-02-24 10:24:46

标签: jsf primefaces managed-bean

我有一个由托管bean @RequestScoped 'A'支持的对话框。我正在从另一个bean 'B'调用对话框@RequestScoped。所以我使用@ManagedProperty'A'来调用'B'。我已经设置了来自'A'的{​​{1}}的值(对象,变量等等)来显示,这取决于'B'的对象。所有值都已正确设置,但是当对话框打开时,不会显示我为'B'设置的值。

如何实现这一目标?

我的意思是调用一个bean支持的对话框,并从另一个bean设置支持bean的值??

我使用了'A'行上的按钮:

p:dataTable

显示对话框,但不显示值。

<p:column headerText="Actions"> <p:commandButton icon="ui-icon-search" title="View" process="@this" oncomplete="receiptViewWidget.show()" action="#{receiptRepoMB.forReceiptDialog}"> <f:setPropertyActionListener target="#{receiptRepoMB.receiptDetObj}" value="#{rd}" /> </p:commandButton> </p:column> 的代码段:

'B'

2 个答案:

答案 0 :(得分:0)

这里的问题是,当您尝试访问时,B中使用的A值将丢失。

我建议你定义一个具有更长范围的A,以便在被B调用时保持其值。(类似于@ViewScoped应该可以工作)。

@ViewScoped
public class A {}

@RequestScoped
public class B {
    @ManagedProperty(value = "#{a}")
    private A a;
}

答案 1 :(得分:0)

我刚刚在update=":receiptViewForm"中添加了p:commandButton,这是对话框的表单ID。

<p:commandButton icon="ui-icon-search" title="View"
process="@this" oncomplete="receiptViewWidget.show()"
action="#{receiptRepoMB.forReceiptDialog}"
update=":receiptViewForm">
<f:setPropertyActionListener target="#{receiptRepoMB.receiptDetObj}" 
value="#{rd}" />
</p:commandButton>

它刚刚起作用。