2011-12-05 14 views

答えて

4

実際にxf:bindを使用して制約を適用できます。ちょうどあなたのXFに次の行を追加します。モデル:、すべての3つの入力フィールドの後ろに必要なマーカーを追加すべての3つのフィールドが満たされ、最後の二つされていることを確認します

<xf:bind nodeset="password" required="true()" constraint=". != ''"/> 
<xf:bind nodeset="newPassword" required="true()" constraint=". != ''"/> 
<xf:bind nodeset="confirmPassword" required="true()" constraint=". = ../newPassword"/> 

が同じでなければなりません。 newPasswordの制約に 'and'を追加することで、passwordとnewPasswordを同じにすることはできないという制約を追加できます。

個人的に、私は少しフィードバックを得たいと思います。これらの制約により、インジケータは各フィールドの後ろに表示され、詳細は表示されません。あなたが情報を提出しようとしている瞬間に表示されるメッセージを持つことができれば、それは一番良いでしょう。しかし、それはXFormsのイベント処理が関係しています。 xforms-submit-eventがあり、何とか捕まえて行動することができます。しかし、最も一般的な問題は、送信がヒットした後、物事がサーバーに送信される前に、ユーザーにフィードバックを表示する可能性がほとんどない、またはごくわずかです。

もう1つの方法は、xf:outputを使用して条件付きメッセージを表示することです。 incremental = "true"属性をxf:secret入力に追加すると、各キーストロークでこれらが更新されます。 xf:output要素のselect式でvalue属性を使用するだけです。次のようなものがあります。

<xf:output value="choose(password = '' or newPassword = '' or confirmPassword = '', 'Please enter current password, new password, and confirmation of new password', '')"/> 

<xf:output value="choose(newPassword = '' or newPassword = confirmPassword, '', 'new password, and confirmation do not match!')"/> 

好きな場合は、それらの周りにかなりのプリントを追加することもできます。動的なスタイリングを行う他の方法はxf:groupを使用していますが、私はそれをあなたのための練習として残します。

最後に、誰も不正行為をしていないことを確認するために、サーバー側のすべての値も確認してください。

HTH!

+0

ありがとうございます!それは魅力のように働いた!私は、 'のようなものの前で試しましたが、私が逃した唯一のものは '../'そして、出力のアイデアは素晴らしいです、ありがとう! – jmacboy

+0

@jmacboyエラーテキストを表示する簡単な方法があります。メッセージを 'xf:alert'要素の中に' xf:secret'要素の中に入れてください。関連するバインドの制約がfalseを返すとすぐに、入力フィールドの横に表示されます。実際のメッセージのプレゼンテーションは、XFormsパーサーによって異なる場合があります。 – grtjn

関連する問題