1

属性が設定され<input type="text">たフィールドを含むページがあります。required="true"フォームを送信する保存ボタンもあります。

required="true"残念ながら、フィールドが空のままでもフォームは送信されます。

これは私の現在のコードです:

<s:decorate template="layout/edit.xhtml" id="decAQty">
    <ui:define name="label">Actual Qty Received</ui:define>
    <h:inputText
        value="#{tktReceivingInfoHome.instance.actualReceivedQty}"
        required="true" id="txtAQty"
        converterMessage="Not a valid Quantity">
        <a:ajax event="blur" render="txtAcTotal,decAQty"
            listener="#{returnsReceivingManager.setActualTotal}" />

    <h:messages id="error" style="display:none" />
    </h:inputText>

<a:commandButton id="btnSave"
    action="#{returnsReceivingManager.checkQtyDiff}" value="Save"
    render="decSQty,decScQty,decRtvQty,addForm,decAQty,decRecdDate,decRecWH,decErrorRMA,decErrorRTV,decReason,decStatusRMA,decStatusRTV,decPriority,decResolution"
    oncomplete="#{returnsReceivingManager.rmaInfo.qtyDiff!=0 ? '#{rich:component(\'addPanel\').show();' : 'callSave();'}"
    onclick="showProgressBar()" />
<a:jsFunction action="#{returnsReceivingManager.save}"
    oncomplete="hideProgressBar()" name="callSave" />

保存ボタンをクリックすると、値が必要であることを示すメッセージがポップアップ表示されますが、その後消えて、トランザクションが失敗したことを示すメッセージが表示されます。

つまり、ページが 2 回送信されているように見えます。この問題を解決する方法について、コミュニティが提供できる提案をお待ちしております。

4

1 に答える 1

0

現時点では、検証はtxtAQtyフィールドを離れたときにのみトリガーされます (blur イベント)。そのため、エラー メッセージが表示されます。次に起こるのは、保存ボタンのクリックです。これは、いくつかのフィールドの再レンダリングを実行しますが、フィールドの処理 (検証を含む) は行いません。そのため、エラーは消えます。

process少なくともフィールドをリストする値を使用して、属性を commandButton に追加する必要がありtxtAQtyます (ただし、再レンダリングする他のすべてのフィールドもさらに優れています)。

于 2012-09-21T21:00:55.050 に答える