多个 bean 一个 <p:dialog>
One <p:dialog> for multiple beans
我的总体布局中有一个 <p:dialog>
。我目前对其 Header
属性进行了硬编码。
我想要的是从不同的 bean 访问它并根据我的选择在 运行 时间更改它的 Header
。
我目前正在使用它向用户显示加载消息,并希望根据当前后端处理更新加载文本,例如 "waiting for server's response" 等
<p:dialog id="main-status-dialog"
widgetVar="mainStatusDialog"
modal="true"
header="Loading..."
draggable="false"
closable="false"
resizable="false"
appendToBody="true">
现在我在点击按钮时从不同的 JSF 页面调用它,例如 <h:link outcome="/generalInformation" value="General Information" onclick="mainStatusDialog.show()" />
它工作正常但总是显示 "Loading..." 因为我有一个硬编码的属性。那么我怎样才能使它动态呢?请注意,我不想只对一个页面或 bean 执行此操作,但是从它访问它的任何页面,我都可以相应地更改 ist Header。
谢谢!
您可以将托管 属性 与您的其中一个托管 bean(例如 HeaderBean
)的 @ManagedProperty 一起使用,并且每次都更改它相应地将 header 值设置为此值,它看起来会动态更新。
@ManagedProperty("#{headerBean}")
private HeaderBean headerBean;
并在您的 header 托管 bean 中创建一个 String
属性 value
,您将在其中存储 header:[=26= 的值]
@ManagedBean(name = "headerBean")
@RequestScoped
public class HeaderBean implements Serializable
{
private String value = null;
// getter and setter methods
在你的p:dialog
中:
<p:dialog id="main-status-dialog"
widgetVar="mainStatusDialog"
modal="true"
header="#{headerBean.value}"
draggable="false"
closable="false"
resizable="false"
appendToBody="true">
查看以下链接以了解更多信息:
- The BalusC Code: Communication in JSF 2.0
- Injecting Managed beans in JSF 2.0
- @ManagedProperty - Inject one request scoped bean into another request scoped bean
编辑:
您可以使用 RequestContext
从 bean 更新对话框,如果您看一下 Better ajax operations and callbacks in JSF with PrimeFaces,您会看到:
RequestContext API enables developers to do 2 simple things. 1st you can tell what you want to update in the xhtml based on conditions in actions that you define in your Managed Beans.To update a component from serverside, you can just write:
从托管 bean 更新 p:dialog 所需的代码是:
RequestContext.getCurrentInstance().
addPartialUpdateTarget("header_id");
您也可以像这样在 commandLink 中使用更新属性:
<h:link outcome="/generalInformation" value="General Information" oncomplete="mainStatusDialog.show()" update=":main-status-dialog"/>
我的总体布局中有一个 <p:dialog>
。我目前对其 Header
属性进行了硬编码。
我想要的是从不同的 bean 访问它并根据我的选择在 运行 时间更改它的 Header
。
我目前正在使用它向用户显示加载消息,并希望根据当前后端处理更新加载文本,例如 "waiting for server's response" 等
<p:dialog id="main-status-dialog"
widgetVar="mainStatusDialog"
modal="true"
header="Loading..."
draggable="false"
closable="false"
resizable="false"
appendToBody="true">
现在我在点击按钮时从不同的 JSF 页面调用它,例如 <h:link outcome="/generalInformation" value="General Information" onclick="mainStatusDialog.show()" />
它工作正常但总是显示 "Loading..." 因为我有一个硬编码的属性。那么我怎样才能使它动态呢?请注意,我不想只对一个页面或 bean 执行此操作,但是从它访问它的任何页面,我都可以相应地更改 ist Header。
谢谢!
您可以将托管 属性 与您的其中一个托管 bean(例如 HeaderBean
)的 @ManagedProperty 一起使用,并且每次都更改它相应地将 header 值设置为此值,它看起来会动态更新。
@ManagedProperty("#{headerBean}")
private HeaderBean headerBean;
并在您的 header 托管 bean 中创建一个 String
属性 value
,您将在其中存储 header:[=26= 的值]
@ManagedBean(name = "headerBean")
@RequestScoped
public class HeaderBean implements Serializable
{
private String value = null;
// getter and setter methods
在你的p:dialog
中:
<p:dialog id="main-status-dialog"
widgetVar="mainStatusDialog"
modal="true"
header="#{headerBean.value}"
draggable="false"
closable="false"
resizable="false"
appendToBody="true">
查看以下链接以了解更多信息:
- The BalusC Code: Communication in JSF 2.0
- Injecting Managed beans in JSF 2.0
- @ManagedProperty - Inject one request scoped bean into another request scoped bean
编辑:
您可以使用 RequestContext
从 bean 更新对话框,如果您看一下 Better ajax operations and callbacks in JSF with PrimeFaces,您会看到:
RequestContext API enables developers to do 2 simple things. 1st you can tell what you want to update in the xhtml based on conditions in actions that you define in your Managed Beans.To update a component from serverside, you can just write:
从托管 bean 更新 p:dialog 所需的代码是:
RequestContext.getCurrentInstance().
addPartialUpdateTarget("header_id");
您也可以像这样在 commandLink 中使用更新属性:
<h:link outcome="/generalInformation" value="General Information" oncomplete="mainStatusDialog.show()" update=":main-status-dialog"/>