Although I add required property to the inputtext in the dialog, it does not add ui-state-error
. I did not have such a problem before PrimeFaces 12 and PrimeFaces 13. How should I follow a path about this.
When I use it as a Composite Component, it does not add ui-state-error, but when I use it normally in a dialog, ui-state-error
is added
Used In
createpage.xhtml
<ui:component xmlns:ui="jakarta.faces.facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:composite="jakarta.faces.composite"
xmlns:f="jakarta.faces.core"
xmlns:h="jakarta.faces.html">
<composite:interface>
<composite:attribute name="id"/>
<composite:attribute name="widgetVar"/>
<composite:attribute name="renderedListener"/>
<composite:attribute name="actionListener" method-signature="void actionListener(jakarta.faces.event.ActionEvent)" required="true"/>
<composite:attribute name="kaydetDevamEt" method-signature="void actionListener(jakarta.faces.event.ActionEvent)" required="false"/>
<composite:attribute name="listForm"/>
<composite:attribute name="columns" default="2"/>
<composite:attribute name="focus"/>
<composite:attribute name="onShow"/>
<composite:attribute name="position" default="#{null}"/>
</composite:interface>
<composite:implementation>
<p:dialog widgetVar="#{cc.attrs.widgetVar}"
modal="true"
resizable="false"
closeOnEscape="true"
header="#{messages.dialogYeniKayit}"
appendTo="@(body)"
focus="#{cc.attrs.focus}"
responsive="true"
onShow="PF('#{cc.attrs.widgetVar}').initPosition();#{cc.attrs.onShow}"
fitViewport="true"
position="#{cc.attrs.position}">
<h:form id="#{cc.id}">
<h:panelGroup id="display">
<p:focus context="display"/>
<p:panelGrid columns="#{cc.attrs.columns}" columnClasses="column" rendered="#{cc.attrs.renderedListener}" layout="tabular">
<composite:insertChildren/>
<f:facet name="footer">
<div class="float-end">
<p:commandButton icon="pi pi-check" styleClass="ui-button-success" actionListener="#{cc.attrs.actionListener}"
value="#{messages.buttonKaydet}" update="display,:#{cc.attrs.listForm}:datalist:datalist,:growl"
oncomplete="handleSubmit(xhr,status,args,PF('#{cc.attrs.widgetVar}'));" onstart="PF('Loading').show()"
onsuccess="PF('Loading').hide()"/>
<p:commandButton icon="pi pi-check-square" styleClass="ui-button-help" actionListener="#{cc.attrs.kaydetDevamEt}"
value="#{messages.buttonKaydetDevamEt}" update="display,:#{cc.attrs.listForm}:datalist:datalist,:growl"
onstart="PF('Loading').show()" onsuccess="PF('Loading').hide()"/>
<p:commandButton icon="pi pi-times" styleClass="ui-button-danger" value="#{messages.buttonIptal}"
onclick="PF('#{cc.attrs.widgetVar}').hide()" immediate="true" process="@this" resetValues="true"
onstart="PF('Loading').show()" onsuccess="PF('Loading').hide()">
<p:resetInput target="@form"/>
</p:commandButton>
</div>
</f:facet>
</p:panelGrid>
</h:panelGroup>
</h:form>
</p:dialog>
</composite:implementation>
</ui:component>
Create.xhtml
<!DOCTYPE html>
<html xmlns:f="jakarta.faces.core"
xmlns:p="http://primefaces.org/ui"
xmlns:coco="jakarta.faces.composite/ui">
<coco:createpage id="AraclarCreateForm"
renderedListener="#{araclarController.selected != null}"
widgetVar="AraclarCreateDialog"
actionListener="#{araclarController.saveNew}"
listForm="AraclarListForm"
kaydetDevamEt="#{araclarController.kaydetDevamEt}">
<p:outputLabel value="#{messages.plakaLabel}" for="plaka" />
<p:inputText id="plaka" value="#{araclarController.selected.plaka}" title="#{messages.plakaText}" required="true" size="45" maxlength="45"/>
<p:outputLabel value="#{messages.aracCinsiLabel}" for="aracCinsi" />
<p:inputText id="aracCinsi" value="#{araclarController.selected.aracCinsi}" title="#{messages.aracCinsiText}" required="true" size="45" maxlength="45"/>
<p:outputLabel value="#{messages.aracTuruLabel}" for="aracTuru" />
<p:selectOneMenu id="aracTuru" value="#{araclarController.selected.aracTuru}" required="true">
<f:selectItem itemValue="#{null}" itemLabel="#{messages.seciniz}"/>
<f:selectItems value="#{araclarController.aracTurus}"
var="aracTurus"
itemValue="#{aracTurus}"
itemLabel="#{messages['aracTuru'+=aracTurus]}"/>
</p:selectOneMenu>
<p:outputLabel value="#{messages.personelLabel}" for="personelId" />
<p:selectOneMenu id="personelId" value="#{araclarController.selected.personelId}" filter="true" converter="omnifaces.SelectItemsConverter">
<f:selectItem itemLabel="#{messages.SelectOneMessage}"/>
<f:selectItems value="#{personellerController.items}"
var="personelIdItem"
itemValue="#{personelIdItem}"
itemLabel="#{personelIdItem.adSoyad.toString()}"/>
</p:selectOneMenu>
<p:outputLabel value="#{messages.ilceLabel}" for="ilce"/>
<p:selectOneMenu id="ilce" value="#{araclarController.selected.ilceId}" filter="true" required="true" converter="omnifaces.SelectItemsConverter">
<f:selectItem itemLabel="#{messages.SelectOneMessage}" itemValue="#{null}"/>
<f:selectItems value="#{ilcelerController.items}"
var="ilceler"
itemValue="#{ilceler}"
itemLabel="#{ilceler.tanim.toString()}"/>
</p:selectOneMenu>
</coco:createpage>
</html>
Javascript
function handleSubmit(xhr, status, args, dialog) {
var dialogId = dialog.id.replaceAll(":","\\\:");
if (args.validationFailed) {
$( "#"+dialogId ).effect( "shake", {times: 3}, 100 );
} else {
dialog.hide();
}
}
How should I go about correcting this problem?
Thanks in advance
Posting this as the final resolution.
This was reported at PrimeFaces: https://github.com/primefaces/primefaces/issues/10552
I have debugged the issue and it turns out to be a Mojarra 4.0.3 bug possibly this one: https://github.com/eclipse-ee4j/mojarra/issues/5214
When tested with MyFaces 4.0.1 the scenario works fine.