Я использую JSF 2.3 (Mojarra 2.3.9.SP02) и PrimeFaces 7.0, работающие на WildFly 17 (Ubuntu 18.04 TLS / или Windows 10). В моем методе действия weiterBid()
в компоненте поддержки (который является ViewScoped) я выполняю проверку, если пользователь только что установил флажок. Если нет, то сообщение об ошибке отображается красным цветом в компоненте <p:panel id="errorMsgPanelId"
(см. Ниже лицевой стороны), и пользователь остается на той же странице. Эта проверка выполняется каждый раз, когда пользователь нажимает кнопку «Далее».
Теперь я понимаю, что даже когда пользователь закрывает панель сообщений об ошибках, каждый раз, когда он нажимает кнопку «Далее» ", вызывается метод действия, и проверка, проверял ли пользователь флажок, выполняется снова и снова. Если флажок не установлен, то сообщение об ошибке должно быть снова показано в том же компоненте <p:panel id="errorMsgPanelId">
, что и раньше. Это действительно предполагаемое поведение? Если да, то у меня есть ошибка, что сообщение об ошибке отображается только при первом нажатии на кнопку «Далее» и никогда не показывается снова, как только пользователь закрывает панель, показывающую его.
Минимальная рабочая пример проекта на github:
https://github.com/alexmivonwien/pf.error.msg
Мой поддерживающий компонент:
@Named("aveBidUnterlagenBean")
@javax.faces.view.ViewScoped
public class AveBidUnterlagenBean implements Serializable {
private boolean confirmationDocumentsGiven;
private FacesMessage errorMessageOnDocumentConfirmation;
public boolean isConfirmationDocumentsGiven() {
return confirmationDocumentsGiven;
}
public void setConfirmationDocumentsGiven(boolean confirmationDocumentsGiven) {
this.confirmationDocumentsGiven = confirmationDocumentsGiven;
}
public String weiterBid() {
if (!confirmationDocumentsGiven) {
String errorMessage = "Please confirm documents for the real estate";
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, errorMessage, null);
FacesContext.getCurrentInstance().addMessage(null, message);
this.errorMessageOnDocumentConfirmation = message;
return null;
}
return null;
}
public FacesMessage getErrorMessageOnDocumentConfirmation() {
return errorMessageOnDocumentConfirmation;
}
public void onCloseErrorMsgPanel(CloseEvent event) {
this.errorMessageOnDocumentConfirmation = null;
}
}
В фасете у меня есть компонент
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</h:head>
<h:outputStylesheet name="primeicons/primeicons.css" library="primefaces"/>
<h:form id="persDatenForm">
<p:panel id="errorMsgPanelId" styleClass="errorMsgPanel" closable="true" widgetVar="errorMsgPanel" rendered="#{aveBidUnterlagenBean.getErrorMessageOnDocumentConfirmation()!=null}">
<p:ajax event="close" listener="#{aveBidUnterlagenBean.onCloseErrorMsgPanel}" update="@parent" />
<h:outputText style="color:red;" value="#{aveBidUnterlagenBean.errorMessageOnDocumentConfirmation.detail}"/>
<p:commandLink outcome="#" style="background-color:white;" onclick="PF('errorMsgPanel').close()">
<i class="pi pi-times"></i>
</p:commandLink>
</p:panel>
<br/>
<p:outputLabel value="Documents overwiev"/>
<br/>
<br/>
<p:selectBooleanCheckbox value="#{aveBidUnterlagenBean.confirmationDocumentsGiven}" itemLabel="I confirm that I read the documents"/>
<br/>
<br/>
<p:commandButton icon = "pi pi-check" value="Next" action="#{aveBidUnterlagenBean.weiterBid}" update="@form"/>
</h:form>
</html>
Теперь моя проблема заключается в том, что если я не установил флажок и впервые щелкаю кнопку «Далее», вызывается метод действия и отображается сообщение об ошибке. Если я закрываю панель сообщений об ошибках и затем снова нажимаю на ту же кнопку «Далее», не установив флажок, сообщение об ошибке больше никогда не отображается.
Это ошибка или функция? Как я мог это преодолеть?
Спасибо и всего наилучшего: Алекс