5

私は PF3.5+JSF2.1.22 を使用しており、Web アプリケーションでは Primefaces Captcha コンポーネントを使用しています。キャプチャコンポーネントで奇妙な問題が発生しています。アプリケーションでこのようなキャプチャコンポーネントを使用しました

<p:captcha id="captcha" label="Captcha" theme="white" />

そして、値をBeanに送信するためのPFコマンドページがあります

<p:commandButton id="clear" value="Clear" update="captcha" styleClass="kuberbutton" />

フォームの送信後に上記のようなボタンを使用している場合、検証の問題やその他の問題が発生し、年齢が再び読み込まれると、キャプチャがページに表示されなくなりますがajax="false"、PF ボタンで使用している場合は機能していますが、これは動作ですコンポーネントは動作しますajax="false"か? 私は彼らも同じことをしたPFのウェブサイトをチェックしましたPrimefaces Captcha

4

2 に答える 2

0

すでに述べたように、Primefaces Captcha コンポーネントは ajax リクエストでは更新できません。しかし、簡単な解決策があります - Captcha コンポーネント自体ではなく、すべてを更新します。

あなたの XHTML:

<h:form id="myForm">
    <h:panelGroup id="updateFormAllValuesButNotCaptcha">
        Name: <p:inputText id="name" value="#{captchaBean.name}" required="true"/>
        <br/>
        Comment: <p:inputTextarea id="comment" value="#{captchaBean.comment}" required="true"/>
        <br/>
    </h:panelGroup>
    <p:captcha/>
    <p:commandButton value="click me" update="updateFormAllValuesButNotCaptcha"
         actionListener="#{captchaBean.someAction}" oncomplete="Recaptcha.reload()"
         onerror="Recaptcha.reload()"/>
</h:form>

<p:messages globalOnly="false" autoUpdate="true"/>

バッキング Bean:

@ManagedBean
@ViewScoped
public class CaptchaBean implements Serializable {
    private String name;
    private String comment;

    public String getComment() { return comment; }

    public void setComment(String comment) { this.comment = comment; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public void someAction() {
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Done", "");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

updateFormAllValuesButNotCaptchaすべてのフォーム入力フィールドを含むが Captcha 自体を含まないパネルを更新していることに注意してください。また、Captcha は再利用できないことに注意することも重要です。そのため、ajax リクエストが完了またはエラーで終了した場合は、常に Captcha をリロードする必要があります。

commandButton のアクションが成功した後に何を更新するかは、あなた次第です。フォームを非表示にして (レンダリングしないで)、確認メッセージのみを表示して、ユーザーが再度コメントを送信しないようにすることができます。

于 2013-08-07T15:30:42.323 に答える