Jsf 2 Primefaces验证码组件不工作
我使用的是PF3.5+JSF2.1.22,在我的web应用程序中,我使用的是Primefaces验证码组件。我在capcha组件中遇到了一些奇怪的问题,我在应用程序中使用了像这样的captcha组件Jsf 2 Primefaces验证码组件不工作,jsf-2,primefaces,Jsf 2,Primefaces,我使用的是PF3.5+JSF2.1.22,在我的web应用程序中,我使用的是Primefaces验证码组件。我在capcha组件中遇到了一些奇怪的问题,我在应用程序中使用了像这样的captcha组件 <p:captcha id="captcha" label="Captcha" theme="white" /> 我有一个PF命令页面将值提交给bean <p:commandButton id="clear" value="Clear" update="captcha" st
<p:captcha id="captcha" label="Captcha" theme="white" />
我有一个PF命令页面将值提交给bean
<p:commandButton id="clear" value="Clear" update="captcha" styleClass="kuberbutton" />
当我在表单提交后使用上述按钮时,如果再次加载任何验证问题和其他即将出现的问题,则验证码在页面中不再可见,但当我在PF按钮中使用
ajax=“false”
时,它正在工作,这是该组件工作的行为吗?我必须执行ajax=“false”
?我查看了PF网站,他们也做了同样的事情,Primefaces中的验证码组件目前不支持ajax行为,这就是为什么您必须在中使用ajax=“false”
,正如前面所说的,Primefaces验证码组件不能通过ajax请求更新。但有一个简单的解决方案-更新所有内容,但不更新验证码组件本身
您的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"/>
请注意,我正在更新updateFormAllValuesButNotCaptcha
面板,该面板包含所有表单输入字段,但不包含Captcha本身。同样重要的是要注意Captcha不能被重用,所以当ajax请求完成或以错误结束时,您必须始终重新加载它
commandButton操作成功后更新的内容由您决定。您可以隐藏表单(不呈现表单)并仅显示确认消息,以确保用户不会再次尝试发送评论。对于ajax行为,您建议使用哪些第三方解决方案?我想在基于ajax请求和primefaces的向导对话框中显示recaptcha,它肯定不是解决此问题的有效解决方案
@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);
}
}