2

現在、フォームに検証を追加しています。チェックすることが2つあります。値自体の正確さ(たとえば、正の整数または有効な電子メールであるかどうか)と、すべての必須フィールドが入力されているかどうかです。

ただし、何らかの方法(f:ajaxまたはIceFacespartialSubmit属性)でタイプの正確性の検証を一度に実行すると(たとえば、フィールドがフォーカスを失った場合)、requiredこの同じ手順で属性もチェックされます。ほとんどの場合、これは問題ありません。ユーザーはすでに値を入力しており、空白のフィールドに戻るのではなく、値を修正する可能性が高いためです。

しかし、実際にフィールドをクリアしたい場合は、エラーが発生せずにクリアすることはできなくなります。したがって、最終的にページを送信するときに、フィールドの必須性を確認するだけです。

現時点では、2つの検証タイプを分離する唯一のアイデアは、バッキングBeanアクションメソッドで必要なすべてのチェックを実行し、ボタンを介して最終的な送信に直接結び付けることです。

別の方法はありますか?

(背景:フィールドを再度クリアする理由は、フォーム内の他の選択によって要件が変わる可能性があるためです。したがって、このフィールドを提供しないことを決定し、その後、実際にこれを行うオプションを修正する必要があります。フィールドはオプションです。)

4

1 に答える 1

2

送信ボタンが実際に押されたときにrequired属性を評価させてください。true

ただし、答えは、送信ボタンがそのロジックを実行する方法(標準f:ajax、、ICEfacesなど)によって異なります。ただし、基本的には、要求パラメーターマップで、目的の送信ボタンが押されたことを示す要求パラメーターを確認できるということです。

たとえば、標準のコマンドボタンの場合:

<h:form id="form">
    ...
    <h:commandButton id="submit" value="Submit" action="#{bean.submit}" />
</h:form>

次に、ボタンのクライアントIDがリクエストパラメータマップに存在するかどうかを確認することで、それを確認できます。

<c:set var="submitButtonPressed" value="#{not empty param['form:submit']}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />

または、<f:ajax>ボタンの場合:

<h:form id="form">
    ...
    <h:commandButton id="submit" value="Submit" action="#{bean.submit}">
        <f:ajax execute="@form" ... />
    </h:commandButton>
</h:form>

javax.faces.source次に、パラメータがボタンのクライアントIDと等しいかどうかを確認することで確認できます。

<c:set var="submitButtonPressed" value="#{param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />

両方を組み合わせることもできます。

<c:set var="submitButtonPressed" value="#{not empty param['form:submit'] or param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
于 2012-09-18T12:56:30.393 に答える