设置标题 在动态

问题描述 投票:1回答:5

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

jsf primefaces
5个回答
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。 (因为更新整个Dialog也会使用这种方法。)

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

最好的祝福,

J.Adam


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"/>           

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变量。


0
投票

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

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

希望这可以帮助


0
投票

我的问题略有不同。我在表格中有一个选定的元素,当我点击一个按钮时,它会在对话框中提供额外的细节。如果我切换了所选元素,<p:dialog>的标题仍然是旧标题。我发现的是:

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

应该是:

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

对于整个对话框而不仅仅是其中的表单。希望这有助于某人。

© www.soinside.com 2019 - 2024. All rights reserved.