PrimeFaces ui-state-error 未添加到 Mojarra 4.0.3 的复合组件中

问题描述 投票:0回答:1

虽然我向对话框中的输入文本添加了必需的属性,但它没有添加

ui-state-error
。我在 PrimeFaces 12 和 PrimeFaces 13 之前没有遇到过这样的问题。我应该如何遵循这个问题的路径。 当我将它用作复合组件时,它不会添加 ui-state-error,但是当我在对话框中正常使用它时,会添加
ui-state-error

用于

  • PrimeFaces 13.0.0
  • 雅加达 10 (jakarta.jakartaee-api)
  • 雅加达面孔 (4.0.3)
  • JDK 11

创建页面.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>

创建.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();
    }
}

我应该如何解决这个问题?

提前致谢

jsf primefaces mojarra
1个回答
0
投票

将此作为最终决议发布。

这是在 PrimeFaces 上报道的:https://github.com/primefaces/primefaces/issues/10552

我已经调试了这个问题,结果发现这是一个 Mojarra 4.0.3 错误,可能是这个:https://github.com/eclipse-ee4j/mojarra/issues/5214

使用 MyFaces 4.0.1 进行测试时,该场景运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.