我的总体布局中有一个<p:dialog>
。我现在有Header
属性硬编码。
我想要的是从不同的bean访问它并根据我的选择在运行时更改其Header
。
我正在使用它向用户显示加载消息,并希望根据当前后端处理更新加载文本,例如“等待服务器的响应”等。
<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()" />
它工作正常,但总是显示“正在加载...”,因为我有一个硬连接的属性。那我怎么能让它变得动态呢?请注意,我不想只对一个页面或bean执行此操作,但是从它访问它的任何页面,我都可以相应地更改ist Header。
谢谢!
答案 0 :(得分:0)
您可以将托管属性与其中一个托管bean(例如HeaderBean
)的 @ManagedProperty 一起使用,并相应地每次更改它,并将标头值设置为此值,它看起来会动态更新。
@ManagedProperty("#{headerBean}")
private HeaderBean headerBean;
在您的标头托管bean中创建一个String
属性value
,您将在其中存储标头的值:
@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">
请查看以下内容以了解更多信息:
您可以使用RequestContext
更新bean中的对话框。如果您查看Better ajax operations and callbacks in JSF with PrimeFaces,您会看到:
RequestContext API 使开发人员能够做两件简单的事情。首先,您可以根据您在Managed Beans中定义的操作条件,在xhtml中告诉您要更新的内容。要从服务器端更新组件,您只需编写:
从托管bean更新p:对话框所需的代码是:
RequestContext.getCurrentInstance().
addPartialUpdateTarget("header_id");
您还可以在commandLink中使用update属性,如下所示:
<h:link outcome="/generalInformation" value="General Information" oncomplete="mainStatusDialog.show()" update=":main-status-dialog"/>