2012-03-27 15 views
3

ここに問題があります。次の方法で送信する前にフォームを検証する必要があります。ユーザーは「保存」ボタンをクリックする必要があります。「送信」をクリックすると「保存してください提出する前に "。orbeon xformsで独自の検証ルールを作成するにはどうすればよいですか?

まず私は、セーブ・インジケータのような形にシステムフィールドを追加すること

<xforms:bind id="isSaved-bind" nodeset="isSaved" 
    name="isSaved" type="xforms:string" constraint="number(.)=1" required="true()"/> 

が好きで、いつ「保存」ボタンをbeeingてアクションに

<xforms:setvalue ref="xxforms:instance('fr-form-instance')/person/isSaved">1</xforms:setvalue> 

を追加するために制約を追加することができていると考えクリックした

しかし、問題は、そこに新しいコードを挿入するために既存のフォームをすべて書き直す必要があることです。

「isSaved」のようなグローバル変数を作成し、送信前にすべてのフォームでチェックし、フォームを保存しなかった場合にエラーメッセージを表示する可能性はありますか?

他にも見えないことがありますか?


すべての回答に感謝します。

+0

私はあなたが状態処理を探していると思います。しかし、提出する前にフォームを保存する必要があるのはなぜですか? XFormsモデルは、私がここでも言及したように、すでに最新のものでなければなりません:http://stackoverflow.com/questions/9737194/how-to-save-userentent-values-in-xforms-textbox/9737969#9737969 – grtjn

+0

1つのフォームでこれを行う方法はわかっているようですが、コードを複製することなくその機能を多くのフォームに取り込む方法が必要です。それは正しい?また、Form Builderを使用しているのか、XFormsを「手作業で」記述していますか? – avernet

+0

avernet、そうです、私はForm Builderを使用しています。あなたが提案したのと同じように、重複したコードは必要ありません。 –

答えて

2

フォームランナーは、フォームがクリーンや汚れであるかどうかを追跡し、あなたはxxforms:instance('fr-persistence-instance')/data-statusに、その情報にアクセスすることができます。提出を扱うコードはapps/fr/includes/persistence/persistence-model.xmlです。そこには、のような読み取りにfr-submit-buttonDOMActivateのリスナーを変更することができます:persistence-model.xmlorbeon-form-runner.jarであることを

<xforms:action ev:event="DOMActivate" ev:observer="fr-submit-button"> 
    <xforms:action if="instance('fr-persistence-instance')/data-status = 'clean'"> 
     <xforms:setvalue ref="instance('fr-persistence-instance')/submit-or-save-or-send">submit</xforms:setvalue> 
     <xforms:dispatch name="fr-save-action" target="fr-persistence-model"> 
      <xxforms:context name="fr:check-data-valid" select="true()"/> 
     </xforms:dispatch> 
    </xforms:action> 
    <xforms:action if="instance('fr-persistence-instance')/data-status = 'dirty'"> 
     <xforms:message>You must save form before submitting it.</xforms:message> 
    </xforms:action> 
</xforms:action> 

注意。そのファイルを変更するには、そこからファイルを抽出し、WEB-INF/resources/apps/fr/includes/persistence/persistence-model.xmlに置きます。 WEB-INF/resourcesのバージョンは、jarファイルのバージョンよりも優先されます。また、Form RunnerまたはForm Builderの内部に依存するこの種の変更は、Orbeon Formsの新しいバージョンにアップグレードする際に壊れる可能性があることにも注意してください。そのため、それらを慎重に把握しておくことで、アップグレード時に変更を簡単に再適用することができます。

+0

フォームビルダーによって構築されたxformを開発し、それを "手作業で"コード化することは可能でしょうか? – Jayy

+1

@KaipaMSarmaフォームビルダで作成したフォームに独自のカスタムコードを配置する最も簡単な方法は、サイドバーから*ソースの編集*機能を使用することです。ある時点でForm Builderでさらに編集を行うつもりがない場合、 'WEB-INF/resources/forms'の下の正しいフォルダにあるソースをディスクにコピーして、すべての編集を排他的に行うこともできます"手作業で"、すなわちテキスト/ XMLエディタで。 – avernet

+0

@avernetありがとう!!!!私がしたいような作品! –

0

グローバルフラグインジケータを使用して、フォームを保存してからウィンドウを閉じるか、送信しても問題ないかどうかを確認します。

この情報は、wikiで明確に説明されています。

すべてベスト!

+0

Xformを "手作業で"開発する場合に便利です。 – Jayy

関連する問題