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

时间:2014-03-14 14:53:27

标签: jsf primefaces

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

5 个答案:

答案 0 :(得分:5)

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

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

<p:dialog id="someDialog" widgetVar="someDialog_var">
   <f:facet name="header">
       <h:outputText id="someDialogHeader" value="#{backingBean.dialogHeader}"/>
   </f:facet>
    ...
 </p:dialog>

匹配

<p:commandButton value="Change dialog header"
actionListener="#{someBackingBean.changeHeader}"
update="someDialogHeader"/>

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

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

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

最诚挚的问候,

J.Adam

答案 1 :(得分:4)

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

<p:dialog id="someDialog" header="#{backingBean.dialogHeader}">  
(...)
</p:dialog> 

然后更改辅助bean中的field 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");
    }
} 

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

<p:commandButton value="Change dialog header"
    actionListener="#{someBackingBean.changeHeader}"
    update="someDialog"/>           

答案 2 :(得分:0)

您还可以选择在客户端运行的JavaScript解决方案:

if (someCondition) 
    dlgTitle = 'Title A';
else
    dlgTitle = 'Title B';
PF('dlgWidgetVarName').show();
$('#yourFormId\\:yourDialogId_title').text(dlgTitle);

在我的情况下,我选择了这种方法,因为我的<p:dialog>在ajax调用后没有更新,其中只有<p:fragment>(在条件下呈现):

        <h:form id="locations_editer_creer">
            <p:dialog id="location_dlg" widgetVar="locationDlg" header="Location" width="610" closeOnEscape="true"
                      minimizable="true" maximizable="true" fitViewport="true" onShow="preparerCreerAjaxRetour()" >
                <p:fragment id="dlgFrag" rendered="#{locationsControleur.action == 'preparer'}" >
                    <ui:include src="/pages/locations/LocEditerCreerDlg.xhtml">Problème, le dialogue de création / édition ne s&apos;affiche pas...</ui:include>
                </p:fragment>
            </p:dialog>
        </h:form>  

此外,如果您需要对您的标题进行本地化,您可以按照此link创建与服务器资源包文件内容相关的javascript变量。

答案 3 :(得分:0)

很久以后,如果你想通过JS更改标题,你可以这样做

PF('widgetVarname').getJQ().find(".ui-dialog-title").text("new title you want")

希望这有帮助

答案 4 :(得分:0)

我的问题略有不同。我在表中有一个选定的元素,当我单击按钮时,该元素将在对话框中提供其他详细信息。如果我切换所选元素,则<p:dialog>的标题仍然是旧标题。我发现的是:

<p:commandButton ... update=":ViewForm" .../>

应该是:

<p:commandButton ... update=":ViewDlg" .../>

代表整个对话框,而不仅仅是内部对话框。希望这对某人有帮助。