我有带TabView的jsf页面...共3个标签。选项卡使用某些表单调用对话框以创建元素。对话框放在外部的.xhtml页面中。 第一个选项卡位于“主”页面(下面的代码),并且从验证bean调用的growl消息在页面上显示良好。第二个选项卡调用growl消息,但是从带有对话框的外部文件放置在窗体上的按钮...没有出现错误,但是没有显示咆哮消息。
我的“主要”观点:
<ui:composition>
<p:growl id="growl" showDetail="true" life="4000" />
<h:form id="systemSettingsForm">
<p:tabView id="ticketSettingsTab" rendered="true" widgetVar="tabViewVar">
<p:tab id="tab0">
...
</p:tab>
<p:tab id="tab1">
<ui:include src="/WEB-INF/tags/dialogs.xhtml" />
<p:commandButton value="Add" oncomplete="PF('addDialog').show()" update=":systemSettingsForm:ticketSettingsTab:addingDlg" />
...
</p:tab>
</p:tabView>
</h:form>
</ui:composition>
</h:body>
对话框视图看起来像(我认为没什么特别的......):
<p:dialog id="addPositionDlg" header="Add position" widgetVar="addDialog">
<h:panelGrid id="addingDlg" columns="3" >
<p:outputLabel value="Position name :"/>
<p:selectOneMenu id="selectType" value="#{positionsTableView.positionType}" >
<f:selectItem itemLabel="Select one option" itemValue="" />
<f:selectItems value="#{positionsTableView.types}" />
</p:selectOneMenu>
<p:outputLabel style="width:1px;"/>
<p:outputLabel value="Prefix :" />
<p:inputText id="addPrefix" value="#{positionsTableView.newPosition.prefix}" />
<pe:tooltip for="addPrefix" showEvent="focus" hideEvent="blur">...</pe:tooltip>
//few simillar inputs, not even validated
<center>
<p:commandButton value="Add" actionListener="#{positionsTableView.addByPrefix}" ajax="true"
update=":systemSettingsForm:ticketSettingsTab:mappingTable" oncomplete="PF('addDialog').hide();"/>
</center>
</h:panelGrid>
</p:dialog>
在对话框窗口(#{positionsTableView.addByPrefix})中由命令按钮调用的actionListener中添加了Growl消息,并且此bean与前一个bean(此工作)位于同一个包中,并以相同的方式添加消息,即:
public static void addMessage(String title, String message) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(title, message));
}
两个调用消息的bean都是会话范围的。
我在这里搜索并试图谷歌解决方案但没有一个成功... 请帮忙。
我的解决方案:
在命令按钮上调用要在growl元素上显示的消息我已经更新了整个tabView菜单并且它工作。可能它不是最好的解决方案,但更新growl id会导致错误(从对话文件中看不到)。