5

次のように入力検証を含むフォームがあります。

<h:form id="insurance-form" rendered = "#{(param['insSaved']=='editable')}">
    <div id="insurance-info">
        <ul id="form-labels" style="text-align:left;">
            <li>Insurance Company&nbsp;</li>
            <li>Policy Number&nbsp;</li>
            <li>Coverage Amount&nbsp;</li>
            <li>Agent's Phone Number&nbsp;</li>
            <li>Agent's Email&nbsp;</li>
        </ul>

        <ul>
            <li>
                <h:inputText value="#{residenceBeans.insuranceCompany}" id="insurance-company" required="true" requiredMessage="company is required"/>
                <h:message for="insurance-company" styleClass="validation-error-msg insuarnce-validation"/>
            </li>

            <li>
                <h:inputText value="#{residenceBeans.policyNumber}" id="insurance-policy" required="true" requiredMessage="number is required"/>
                <h:message for="insurance-policy" styleClass="validation-error-msg insuarnce-validation"/>
            </li>

            <li>
                <h:inputText value="#{residenceBeans.coverageAmount}" id="insurance-amount" required="true" requiredMessage="coverage amount is required"/>
                <h:message for="insurance-amount" styleClass="validation-error-msg insuarnce-validation"/>
            </li>

            <li>
                <h:inputText value="#{residenceBeans.agentPhone}" id="insurance-phone" required="true" requiredMessage="phone is required"/>
                <h:message for="insurance-phone" styleClass="validation-error-msg  insuarnce-validation"/>
            </li>

            <li>
                <h:inputText value="#{residenceBeans.agentMail}" id="insurance-mail" required="true" requiredMessage="email is required">
                    <f:validator validatorId="emailValidator"/>
                </h:inputText>
                <h:message for="insurance-mail" styleClass="validation-error-msg insuarnce-validation"/>
            </li>
        </ul>                                       

        <h:commandLink value="SAVE POLICY INFORMATION" action="#{residenceBeans.saveInsuranceInfo}"  styleClass="insurance-link-container">
            <f:param name="insSaved" value="saved"/>
        </h:commandLink>
    </div>
</h:form>   

フィールドを空のままにしてフォームを送信すると、検証メッセージが表示されることを期待していますが、代わりに次の警告が表示されます。

21:20:47,671 INFO  [javax.enterprise.resource.webcontainer.jsf.renderkit] (http--127.0.0.1-8080-3) WARNING: FacesMessage(s) have been enqueued, but may not have been displayed
sourceId=insurance-form:insurance-company[severity=(ERROR 2), summary=(company is required), detail=(company is required)]
sourceId=insurance-form:insurance-policy[severity=(ERROR 2), summary=(number is required), detail=(number is required)]
sourceId=insurance-form:insurance-amount[severity=(ERROR 2), summary=(coverage amount is required), detail=(coverage amount is required)]
sourceId=insurance-form:insurance-phone[severity=(ERROR 2), summary=(phone is required), detail=(phone is required)]
sourceId=insurance-form:insurance-mail[severity=(ERROR 2), summary=(email is required), detail=(email is required)]

それを修正する方法を教えてください。

4

2 に答える 2

7

ポストバックではフォーム全体がまったくレンダリングされないため、メッセージは表示されません。のリクエストパラメータのinsSaved値が。の場合にのみレンダリングされるようにフォームに指示しましたeditable。ただし、送信ボタンではに変更されているsavedため、フォームは基本的にポストバックでレンダリングされることはなく、同封のメッセージもレンダリングされません。これは、コードの設定方法を考えると、完全に予想される動作です。

とにかくポストバックで検証エラーが発生した場合にフォームを表示したい場合は、それrenderedに応じてその属性を変更する必要があります。交換

<h:form id="insurance-form" rendered="#{(param['insSaved']=='editable')}">

<h:form id="insurance-form" rendered="#{(facesContext.postback and facesContext.validationFailed) or (param['insSaved'] == 'editable')}">
于 2012-10-30T08:48:15.570 に答える
-2

この問題が発生しました。応答は、primefacesライブラリを削除してから、ライブラリリストに再度追加することです。

于 2016-01-12T08:20:30.443 に答える