动态设置<p:dialog>的标题

emr*_*rka 2 jsf primefaces

我必须在JSF中为<p:dialog>设置头.我已经写入了setHeaderName(),用于名称getter和setter.But我看不到<p:dialog>标题的名称如何动态更改p的头部:PrimeFaces中的对话框.

Ome*_*001 6

正如之前mareckmareck所提到的,您可以通过对组件使用简单的ajax更新来实现.

另外,我建议使用标头事实而不是标头属性,如:

<p:dialog id="someDialog" widgetVar="someDialog_var">
   <f:facet name="header">
       <h:outputText id="someDialogHeader" value="#{backingBean.dialogHeader}"/>
   </f:facet>
    ...
 </p:dialog>
Run Code Online (Sandbox Code Playgroud)

和匹配

<p:commandButton value="Change dialog header"
actionListener="#{someBackingBean.changeHeader}"
update="someDialogHeader"/>
Run Code Online (Sandbox Code Playgroud)

(我复制并扩展了这个例子,顺便提一下mareckmareck ...)

这是一个更好的解决方案,因为现在您只能更新标题文本,而不是整个Dialog.(因为更新整个Dialog也会使用这种方法.)

此外,您可能已经注意到,一旦更新整个对话框,您的对话框将关闭.这种方法也摆脱了这个问题.

最好的祝福,

J.Adam


mar*_*eck 5

这在很大程度上取决于实现,但通常您可以这样做:

<p:dialog id="someDialog" header="#{backingBean.dialogHeader}">  
(...)
</p:dialog> 
Run Code Online (Sandbox Code Playgroud)

然后在支持 bean 中更改字段 dialogHeader 的值(通过 ajax 或任何其他方式)。请记住,您需要一个 setter 和 getter 才能使其工作。

@ViewScoped
@ManagedBean
public class SomeBackingBean {

    private String dialogHeader;

    public void setDialogHeader(final String dialogHeader) { 
        this.dialogHeader = dialogHeader;
    }

    public String getDialogHeader() {
        return dialogHeader;
    }

    public void changeHeader() {
        setDialogHeader("SomeHeader");
    }
} 
Run Code Online (Sandbox Code Playgroud)

调用 changeHeader 方法和重新渲染对话框将更改标题。例如,它可以这样调用:

<p:commandButton value="Change dialog header"
    actionListener="#{someBackingBean.changeHeader}"
    update="someDialog"/>           
Run Code Online (Sandbox Code Playgroud)