我必须为< p:对话框>在JSF中。我已经写入了setHeaderName(),用于名称getter和setter.But我看不到<标题的名称。 p:对话框> 如何在PrimeFaces中动态更改p:对话框的头部。
答案 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'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" .../>
代表整个对话框,而不仅仅是内部对话框。希望这对某人有帮助。