0

例として、次のような入力フィールドがあるとしましょう。

<p:panel id="panel" closable="false" toggleOrientation="horizontal" toggleable="true" header="New">
    <p:focus context="panel"/>
    <p:watermark for="txtCountryName" value="Enter a valid country name."/>
    <p:watermark for="txtCountryCode" value="Enter a valid country code."/>
    <p:messages id="systemMessages" globalOnly="true" redisplay="false" showDetail="true" showSummary="true" autoUpdate="false" closable="true"/>
    <p:messages id="specificSystemMessages" for="paramId" globalOnly="false" redisplay="false" showDetail="true" showSummary="false" autoUpdate="false" closable="true"/>

        <h:panelGrid id="panelGrid" columns="3" cellpadding="5">
            <p:outputLabel for="txtCountryName" value="Country"/>
            <p:inputText id="txtCountryName" value="#{countryManagedBean.txtCountryName}" label="Country name" required="true" maxlength="45">
                <f:validateLength minimum="2" maximum="45"/>
            </p:inputText>
            <p:message for="txtCountryName" showSummary="false"/>

            <p:outputLabel for="txtCountryCode" value="Country Code"/>
            <p:inputText id="txtCountryCode" value="#{countryManagedBean.txtCountryCode}" required="true" maxlength="45" label="Country code">
                <f:validateLength minimum="2" maximum="45"/>
            </p:inputText>
            <p:message for="txtCountryCode" showSummary="false"/>


            <p:commandButton id="btnSubmit" update="dataTable panel messages" actionListener="#{countryManagedBean.insert}" icon="ui-icon-check" value="Save"/>
</h:panelGrid>
</p:panel>

そして、次のような DataTable 。

<p:panel id="dataTablePanel" toggleable="true" toggleOrientation="horizontal" closable="false" header="Data">
    <p:dataTable id="dataTable" var="row" value="#{countryManagedBean}"
                 lazy="true"
                 pageLinks="10"
                 paginator="true"
                 sortMode="multiple"
                 resizableColumns="true"
                 sortOrder="descending"
                 editable="true"
                 filterEvent="keyup"
                 selection="#{countryManagedBean.selectedValues}"
                 rowsPerPageTemplate="5,10,15"
                 rows="10"
                 rowKey="#{row.countryId}"
                 rowIndexVar="rowIndex"
                 rowStyleClass="#{row.countryId eq countryManagedBean.id? 'selected-data-row' : null}"
                 editMode="row">


                 ...
                 ...
                 ...
    </p:dataTable>
</p:panel>

このコマンドボタンを押すと、

<p:commandButton id="btnSubmit" update="dataTable panel messages" actionListener="#{countryManagedBean.insert}" icon="ui-icon-check" value="Save"/>

update="dataTable panel messages"をクリックすると、行がすべての検証規則を満たし、属性を使用して DataTable が更新された場合に、基になるデータベースに行が追加されます。

これらの入力フィールドで指定されたすべての検証基準が満たされ、行が実際に作成された場合にのみ、この DataTable を更新したいと思います。

これらの検証ルールのいずれかが失敗した場合、この DataTable はそれ以上更新されるべきではありません。これはまったく不要であり、コストのかかる JPA 基準や JPQL クエリが実行される原因となります。これは可能ですか?

プライムフェイス3.5です。

4

2 に答える 2

4

その場合は、remotecommand を使用してみてください。以下に示すように、送信ボタンを変更します。

<p:commandButton id="btnSubmit" action="#{countryManagedBean.insert}" icon="ui-icon-check" value="Save" oncomplete="handleRequest(xhr, status, args)"/>

以下に示すように、p:remoteCommand を追加します。

<p:remoteCommand name="updateTable" update="dataTable">

このリモート コマンドは、テーブルの更新に使用されます。

はい、jsの下に追加します。

<script type="text/javascript">  
        function handleRequest(xhr, status, args) {  
            if(!args.validationFailed) {  
                updateTable();
                }   
           }  
    </script> 

HTH

于 2013-07-08T08:41:40.543 に答える
0

このコードを、挿入機能の最後または検証をチェックする場所で、ベイクドビーン countryManagedBean に追加してみてください。

RequestContext context = RequestContext.getCurrentInstance();
context.addCallbackParam("validationFailed", "true");

これにより、javascript で確認するコールバック パラメータが作成されます。

于 2016-08-12T09:03:05.367 に答える