保存ボタンと送信ボタンのある大きなフォームを持つ webMethods CAF タスクがあります。フォーム上の多くの要素には検証があります。ユーザーは [保存] をクリックし、フォームをバックエンド モデルに送信して、検証を実行せずにタスク データとして保存できるようにする必要があります。[送信] をクリックすると、検証が開始されます。
これを行うようにページを構成するにはどうすればよいですか。それはとても正常な要件であり、私は立ち往生しています!
保存ボタンと送信ボタンのある大きなフォームを持つ webMethods CAF タスクがあります。フォーム上の多くの要素には検証があります。ユーザーは [保存] をクリックし、フォームをバックエンド モデルに送信して、検証を実行せずにタスク データとして保存できるようにする必要があります。[送信] をクリックすると、検証が開始されます。
これを行うようにページを構成するにはどうすればよいですか。それはとても正常な要件であり、私は立ち往生しています!
あまり楽しくありません。
ブール値を返す Java コードでゲッターを作成します。その中で、ボタンの ID が送信されたフィールドの 1 つである場合は true、そうでない場合は false を返します。
private boolean validationRequired() {
return mapValueEndsWith((Map<String, String>)getRequestParam(),
new String[] {
"saveButton", // Your save button
"anotherButton", // Perhaps another button also shouldn't validate
"myForm:aThirdButton" // perhaps you want to be specific to a form
});
}
保存時を除き、必須にする必要があるすべてのフィールドで、 Validation->required 属性を validationRequired ゲッターにバインドします。
それでおしまい!画面上に多くのフィールドが表示されるのは非常に面倒ですが、機能します。
Ps mapValueEndswith とは何ですか? 単なるユーティリティです。コンパクトにするために空白を削除しました:
private boolean mapValueEndsWith(Map<String, String> haystack, String[] needles) {
for(String needle : needles) if(mapValueEndsWith(haystack, needle)) return true;
return false;
}
private boolean mapValueEndsWith(Map<String, String> haystack, String needle) {
for(String value : haystack.values()) if(value.endsWith(needle)) return true;
return false;
}
提供されたアプローチを見ると、フォームに文字列型フィールドのみが含まれている場合にのみ機能します。integer、float、data-time などの他のデータ型が UI フィールドにマップされ、変換が使用されている場合、これらのフィールドに間違ったデータが入力されると失敗する可能性があります。