Jsf 设置<;p:dialog>;动态地

Jsf 设置<;p:dialog>;动态地,jsf,primefaces,Jsf,Primefaces,我必须在JSF中为设置头。我已经为name getter和setter写入了setHeaderName()。但是我看不到的头的名称 如何在PrimeFaces中动态更改p:dialog的头部。这在很大程度上取决于实现,但通常您可以这样做: <p:dialog id="someDialog" header="#{backingBean.dialogHeader}"> (...) </p:dialog> <p:commandButton value="Chang

我必须在JSF中为设置头。我已经为name getter和setter写入了setHeaderName()。但是我看不到的头的名称
如何在PrimeFaces中动态更改p:dialog的头部。

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

<p:dialog id="someDialog" header="#{backingBean.dialogHeader}">  
(...)
</p:dialog> 
<p:commandButton value="Change dialog header"
    actionListener="#{someBackingBean.changeHeader}"
    update="someDialog"/>           
调用changeHeader方法并重新命名对话框将更改标头。例如,可以这样称呼它:

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

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

if (someCondition) 
    dlgTitle = 'Title A';
else
    dlgTitle = 'Title B';
PF('dlgWidgetVarName').show();
$('#yourFormId\\:yourDialogId_title').text(dlgTitle);
在我的例子中,我之所以选择这种方法,是因为我的
在ajax调用后不会更新,只有它内部的
(有条件地呈现):


问题是,对话与评论;阿菲什·帕斯。。。

此外,如果您需要对标题进行本地化,您可以按照此操作创建javascript变量,并使用服务器的资源包文件的内容进行初始化。

正如mareckmareck之前提到的,您可以通过对组件进行简单的ajax更新来实现这一点

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

<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提供的示例…)

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

此外,您可能已经注意到,更新整个对话框后,对话框将关闭。这种方法也解决了这个问题

致以最良好的祝愿


J.Adam

过了很长时间,但是如果您想通过JS更改标题,您可以这样做

PF('widgetVarname').getJQ().find(“.ui对话框标题”).text(“您想要的新标题”)


希望这有帮助

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

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

应该是:

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

用于整个对话框,而不仅仅是其中的窗体。希望这对别人有帮助