我使用p:tabview有以下页面,有3个标签。
dashboard.xhtml
<h:body>
<h:form id="headerForm" prependId="false">
<p:tabView id="tabView" dynamic="true" cache="true">
<p:tab id="applicationUserManagementTab"
title="Application User Mgmt">
<ui:include src="AppUserManagement.xhtml" />
</p:tab>
<p:tab id="userManagementTab" title="User Management">
//Other code here
</p:tab>
<p:tab id="userGroupManagementTab" title="User Group Mgmt">
</p:tab>
</p:tabView>
</h:form>
</h:body>
<p:dialog id="addNewUserDialog" widgetVar="addNewUserDialog" header="${msgs.AppUserMgmt_AppUsers_NewUser_Dialog_Header} ${AppUserManagementBean.applicationName}, ${AppUserManagementBean.groupName}" resizable="false"
width="800" showEffect="clip" hideEffect="fold" modal="true">
<h:form id="addNewUserform">
<ui:include src="UMNewUserDialog.xhtml" />
</h:form>
</p:dialog>
applicationUserManagementTab 标签选择了2 p:selectOneMenu ,我在 p:dataTable 中显示了一些数据。在数据表的页脚中添加了一个按钮新用户。单击该按钮会打开一个对话框,我想接受一些值并保存值。
但是,如果在任何一个p中都没有选择任何值:selectOneMenu被选中,然后如果用户点击新用户按钮我不想显示对话框,而是想要显示使用 p:growl 的错误消息。
applicationUserManagementTab选项卡的代码 AppUserManagement.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<p:panelGrid id="filterUsers" style="width:100%;">
<p:growl autoUpdate="true" showDetail="true" id="errorsAppUsrMgmt"/>
<p:row>
<p:column style="left: 40%;">
<p:selectOneMenu required="true" value="#{AppUserManagementBean.applicationName}" styleClass="localeSelectClass" id="applicationName">
<f:selectItems value="#{AppUserManagementBean.systemDetails}" />
<p:ajax update="groupName,userList" listener="#{AppUserManagementBean.loadGroupDetails}" />
</p:selectOneMenu>
</p:column>
</p:row>
<p:row>
<p:column style="left: 40%;">
<p:selectOneMenu required="true" value="#{AppUserManagementBean.groupName}" styleClass="localeSelectClass" id="groupName">
<f:selectItems value="#{AppUserManagementBean.groupDetails}" />
<p:ajax update="userList" listener="#{AppUserManagementBean.loadUserDetails}"/>
</p:selectOneMenu>
</p:column>
</p:row>
<p:row>
<p:column>
<p:dataTable id="userList" var="user" value="#{AppUserManagementBean.lstUsrDetails}"
rowIndexVar="rowNum">
// I have 6 columns displaying the data here
<f:facet name="footer">
<p:commandButton actionListener="#{AppUserManagementBean.validateRequest}" id="addUserButton" value="#{msgs.AppUserMgmt_AppUsers_NewUser_ButtonLabel}" icon="ui-icon-circle-plus" oncomplete="if(args.inValidReq) addNewUserDialog.hide(); else addNewUserDialog.show();"/>
</f:facet>
</p:dataTable>
</p:column>
</p:row>
</p:panelGrid>
</p:fieldset>
</ui:composition>
单击新用户按钮
时将调用的ActionListener方法public void validateRequest(){
if ((applicationName != null && applicationName.equalsIgnoreCase("-1")) || (groupName != null && groupName.equalsIgnoreCase("-1"))) {
FacesMessage message = addMessage("AddNewDialogError", "AppUserMgmt_AppNameOrGrpName_NotSelected", null);
message.setSeverity(FacesMessage.SEVERITY_ERROR);
RequestContext reqCtx = RequestContext.getCurrentInstance();
reqCtx.addCallbackParam("inValidReq", "true");
reqCtx.update(":tabView:errorsAppUsrMgmt");
}
}
工作正常
当我点击新用户按钮并且在两个p:selectOneMenu
组件中未选择任何值时,FacesMessages将添加到FacesContext,但不会立即显示咆哮。只有当我切换标签并返回时,才会显示咆哮声。
我想要实现的目标
在ajax调用完成后,应立即显示咆哮(无需切换选项卡)。
我做错了吗?
我正在使用myfaces 2.0.7,primefaces 3.4,WebSphere Application Server 7.0.0.25