0

私のアプリケーションでは、ユーザーが値を編集できる dataTables を含むいくつかのダイアログがあるため、primefaces rowEditor を使用しています...この画面でわかるように、dataTable に必須フィールドがある場合があります。

必須フィールドを持つ dataTable

この画面では、ユーザーがすべての行に入力する必要はないため、required=true を入力すると、非アクティブなフィールドを含むすべてのフィールドに必須の検証メッセージが表示されます。このように、ユーザーが [OK] ボタンをクリックすると、多くの必須フィールドの検証エラーが発生してポップアップを閉じることができなくなります。このように必須属性でパラメーターを使用しようとしました:

<f:facet name="input">
    <h:selectOneMenu value="#{cfop.idTipoTributacao}" required="#{param['EDITAVEL']}"
                                             style="width: 100px;">
        <f:selectItems value="#{selectTipoTributacao.itens}"/>
    </h:selectOneMenu>
</f:facet>

残念ながら、ユーザーが p:rowEditor の保存ボタンをクリックしたときにこのパラメーターを渡す方法が見つかりませんでした。これらのフィールドが編集モードのときのみ必須にする方法はありますか?? MyFacesでprimefaces 2.2.1を使用しています

4

3 に答える 3

0

または

<p:commandButton id="okButton" value="OK" onclick="return $('.ui-icon-check:visible').length == 0"/>
于 2016-03-14T12:26:05.017 に答える
0

独自の複合コンポーネントを作成する問題を解決しました...このようにして、検証がいつ行われるかをより詳細に制御できます。

セルエディター:

<c:interface>
    <c:attribute name="id" required="false" targets="celula"/>
    <c:attribute name="desabilitado" required="false" default="true"/>
    <c:facet name="entrada" required="true"/>
    <c:facet name="saida" required="true"/>
</c:interface>
<c:implementation>
    <h:panelGroup id="celula" layout="block" styleClass="hrgi-celula">
        <h:panelGroup layout="block" styleClass="hrgi-celula-entrada" style="display: none">
            <c:renderFacet name="entrada" required="true"/>
        </h:panelGroup>
        <h:panelGroup layout="block" styleClass="hrgi-celula-saida">
            <c:renderFacet name="saida" required="true"/>
        </h:panelGroup>
    </h:panelGroup>
</c:implementation>

行エディタ:

<c:interface>
    <c:attribute name="action" method-signature="void method(java.lang.Object)"/>
    <c:attribute name="indice" required="true"/>
    <c:attribute name="update" required="false" default=""/>
</c:interface>
<c:implementation>
    <h:outputScript library="js" name="hrgiRowEditor.js" target="head"/>
    <h:panelGroup layout="block">
        <h:panelGroup id="painelBotaoEdicao" layout="block" style="display: inline">
            <h:graphicImage library="img" name="pencil.png" onclick="ativarCamposEditaveis('#{cc.clientId}');"
                        style="cursor: pointer;"/>
        </h:panelGroup>
        <h:panelGroup id="painelBotoesSalvamento" layout="block" style="display: none">
            <h:commandLink id="botaoSalvar" style="float: left;" onclick="definirIdRowEditor('#{cc.clientId}')">
                <h:graphicImage library="img" name="check.png"/>
                <f:param name="#{cc.attrs.indice}" value="true"/>
                <p:ajax event="click" update="@form #{cc.attrs.update}" process="@form" listener="#{cc.attrs.action}"
                    oncomplete="desativarCamposEditaveisQuandoSucesso(xhr, status, args, this);"/>
            </h:commandLink>
            <h:graphicImage library="img" name="cancel.png" style="float: left; cursor: pointer;"
                        onclick="desativarCamposEditaveis('#{cc.clientId}');">
            </h:graphicImage>
        </h:panelGroup>
    </h:panelGroup>
</c:implementation>

唯一の問題は、テーブルの 1 行だけを更新できないことです...おそらく別のコンポーネントを作成します...

于 2012-07-04T20:52:24.913 に答える