我在页面中有要求,当用户在输入文本框中输入客户名称并单击搜索按钮时,系统会验证用户是否已存在于DB中。 如果客户已经存在,系统会显示一个带有消息的弹出窗口和一些用于执行其他任务的操作按钮。 为了实现这一点,我在openfaces中使用了ajax请求(我已经用作jsf组件的lib)commandlink(充当按钮)来执行客户名输入字段,在listener属性中,我正在调用一个方法来自支持bean以对DB进行验证,如果存在,则将布尔标志设置为true,以便将弹出窗口的呈现属性显示为true。 问题是即使我将boolean标志设置为true以呈现poppup,它也会将值设置为false。 当我将弹出窗口的渲染属性硬编码为true时,为了检查是否在弹出窗口中打印了faces消息,即使弹出窗口显示也没有显示。
让我知道为什么弹出窗口没有为其呈现的属性设置值true,即使它在支持bean方法中设置并且面部消息未显示,即使它正在辅助bean中设置并且使用硬编码(以防万一)将rendered属性设置为true。
我正在分享代码段,以帮助您了解该方案......
代码段:
<h:inputText size="30" id="inptCustNam" value="#{selectAccountTypeManagedBean.customer.customerName}"
styleClass="fieldLabelText"
rendered="#{not empty selectAccountTypeManagedBean.customer.customerId and selectAccountTypeManagedBean.customer.customerId > 0}">
</h:inputText >
<o:commandLink styleClass="buttonOrange" listener="#{selectAccountTypeManagedBean.checkExistingCustomer}"
event="click" render=":form:existingcustnamespopup" execute=":form:inptCustNam"
onajaxend="return custPopup('existingcustnamespopup');"> <span>#{message['application.account.accounttype.button.continue']}</span>
</o:commandLink>
<o:popupLayer id="existingcustnamespopup" height="150px" width="450px" modal="true" draggable="true" modalLayerClass="popupBackground"
rendered="#{selectAccountTypeManagedBean.customerExist}">
<h:panelGrid border="0" columns="1" cellpadding="0" cellspacing="0" rowClasses="messageHeader" width="20%" rendered="#{!empty facesContext.maximumSeverity}" >
<h:outputText value="#{selectAccountTypeManagedBean.messageHeader}" escape="false" rendered="#{selectAccountTypeManagedBean.renderMessage}"/>
<h:panelGrid border="0" columns="2" cellpadding="0" cellspacing="0" rowClasses="infoMessage" width="100%">
<h:graphicImage library="common" name="#{selectAccountTypeManagedBean.messageImage}" style="float: left; vertical-align: top;" width="20" height="20"/>
<h:messages errorClass="errorMessage" infoClass="infoMessage" warnClass="errorMessage" fatalClass="errorMessage" layout="table" globalOnly="true" showDetail="true" showSummary="false"/>
</h:panelGrid>
</h:panelGrid>
</o:popupLayer>
public String checkExistingCustomer(AjaxBehaviorEvent event) {
//get the customer name entered in the input text field
String name = customer.getCustomerName();
if (name != null) {
//the name "pou" should come from DB call but to test it hard coded now
if (name.equals("pou")) {
//setting boolean flag to true in order to render popup
setCustomerExist(true);
//Faces message is created
addFacesMessage(FacesMessage.SEVERITY_WARN, getFormattedResource(getFacesContext(), null, "application.account.accounttype.message.warn"), null);
}
return null;
}
}