ユーザがプロジェクトを追加できるダイアログがあるページがあります。私はサーバー側の検証エラーメッセージをp:messageタグに表示したいが、検証が合格したらp:growlタグとダイアログを閉じて成功メッセージを表示したい。検証エラーのためにp:メッセージを追加しようとするprimefacesと成功メッセージのためにp:growl
これをどのように達成できますか?現在、すべてのメッセージ(エラーまたは成功)をすべてのp:growl、すべてのp:メッセージ、またはその両方に表示することができます。
<p:growl id="growl" showDetail="true" life="3000" autoUpdate="false" />
<p:dialog id="projectsDialog" header="Add Project" widgetVar="projectsDialog" modal="true">
<p:messages id="messages" autoUpdate="false" showDetail="true" />
<h:form>
<h:outputLabel for="investigator" value="Investigator" />
<p:selectOneMenu value="#{ppBacker.investigatorKey}" id="investigator" size="1" styleClass="listBoxMedium" >
<f:selectItems value="#{ppBacker.investigators}" />
</p:selectOneMenu>
<h:outputLabel for="startDate" value="Start Date" />
<p:calendar value="#{ppBacker.startDate}" id="startDate" mode="popup" navigator="true" required="true" requiredMessage="Start Date is required" />
<h:outputLabel for="endDate" value="End Date" />
<p:calendar value="#{ppBacker.endDate}" id="endDate" mode="popup" navigator="true" required="true" requiredMessage="End Date is required" />
<p:commandButton value="Add Project" id="s1Btn" type="submit" oncomplete="handleLoginRequest(xhr, status, args)" actionListener="#{ppBacker.addProject}" update=":growl">
<f:setPropertyActionListener target="#{ppBacker.grantKey}" value="#{ppBacker.grantKey}" />
</p:commandButton>
<!-- this jquery closes the add project dialog if the server side validation is successful -->
<script type="text/javascript">
function handleLoginRequest(xhr, status, args) {
console.log('args.success = '+args.success);
console.log('args.validationFaile = '+args.validationFailed);
if(args.validationFailed || !args.success) {
jQuery('#projectsDialog').effect("shake", { times:1 }, 100);
} else {
projectsDialog.hide();
}
}
</script>
</h:form>
マイppBacker.addProject方法
public void addProject(){
RequestContext context = RequestContext.getCurrentInstance();
FacesMessage msg = null;
boolean success = false;
// validate the investigator, start date, and end date are set
if(!getProject().getInvestigatorKey().equals("0") && getProject().getStartDate() != null && getProject().getStartDate() != null) {
success = true;
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Project Added Successfully", "");
} else {
success = false;
msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Failed", "Investigator, Start Date, and End Date are required");
}
System.out.println("success = "+success);
// I'M GUESSING THAT I CAN SOMEHOW USE THE FIRST PARAMETER OF THIS TO ATTACH MY MESSAGE, BUT I'M NOT SURE
FacesContext.getCurrentInstance().addMessage(null, msg);
context.addCallbackParam("success", success);
}
あなたが探しているものではありません...しかし、この答えを見て... stackoverflow.com/a/8634383/617373 – Daniel