我正在按照我在本页http://javahunter.wordpress.com/2010/09/25/integrating-captcha-in-jsf-2-0/中找到的教程,将验证码集成到我在JSF 2.0中制作的用户注册表单中,但我遇到了一些问题,也许有人可以帮助我。这就是我到目前为止所做的:
JSF页面:
<h:graphicImage id="capimg" value="#{facesContext.externalContext.requestContextPath}/../Captcha.jpg"/>
<h:inputText id="captchaUserInput" value="#{registrationController.captchaUserInput}"/>
<br />
<h:commandButton value="Register"
action="#{registrationController.doRegisterBuyer}">
</h:commandButton>
Managed bean:
@ManagedBean
@RequestScoped
public class RegistrationController {
...
private String captchaUserInput;
...
public String doRegisterBuyer() throws Exception {
...<code for setting the values of the user>
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
Boolean isResponseCorrect = Boolean.FALSE;
javax.servlet.http.HttpSession session = request.getSession();
String parm = captchaUserInput;
String c = (String) session.getAttribute(MyCaptcha.CAPTCHA_KEY);
if (parm.equals(c)) {
buyersRegistratorEJB.createBuyer(buyer);
} else {
return "failed";
}
return "registrationSucceded.xhtml";
}
类MyCaptcha.java(源代码可以在上面的链接中找到)是一个servlet,我添加到我项目中名为other的包中
web.xml配置:
<servlet>
<servlet-name>Captcha</servlet-name>
<servlet-class>other.MyCaptcha</servlet-class>
<init-param>
<description>passing height</description>
<param-name>height</param-name>
<param-value>30</param-value>
</init-param>
<init-param>
<description>passing height</description>
<param-name>width</param-name>
<param-value>120</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Captcha</servlet-name>
<url-pattern>/Captcha.jpg</url-pattern>
</servlet-mapping>
我认为这是问题的一部分,因为当我导航到我的注册页面时,我在控制台中看到了这一点:
WARNING: StandardWrapperValve[Captcha]: PWC1382: Allocate exception for servlet Captcha
java.lang.ClassNotFoundException: other.MyCaptcha
我认为我无法正确实现此原因的原因之一是因为web.xml中MyCaptcha.java的路径不正确。我怎么能解决这个问题?另外我想提一下,我不想添加更改图像选项,只有图像对我来说很好。
答案 0 :(得分:1)
类路径中缺少servlet。根据这条评论
它位于我的项目C:\ jee6workspace \ BBS \ src \ other \ MyCaptcha.java
您似乎正在使用IDE。重建项目,将项目重新发布到服务器,重新启动服务器。还要检查服务器部署文件夹,确保servlet已编译并显示为BBS/WEB-INF/classes/other/MyCaptcha.class
文件。
如果是,并且您仍然遇到此问题,那么servlet的构造/初始化失败(它引发了未捕获的异常)。阅读服务器日志以获取详细信息并相应地修复根本原因。
答案 1 :(得分:0)
也许您可以尝试使用包含验证码组件的Primefaces jsf组件库。它很容易使用(只需放入你的页面)。
www.primefaces.org