2011-03-07 52 views
1

整合验证码我的教程,我在http://javahunter.wordpress.com/2010/09/25/integrating-captcha-in-jsf-2-0/本页面发现一个验证码集成到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> 

管理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,我添加到一个叫做其他项目的包中

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

'other.MyCaptcha'位于何处?它在类路径上吗? – Thomas

+0

这是我的项目,在C:\ jee6workspace \ BBS的\ src \其他\ MyCaptcha.java我怎样才能将其添加到类路径? – sfrj

回答

1

该servlet中缺少类路径。按照此评论

这是我的项目,在C:\ jee6workspace \ BBS的\ src \其他\ MyCaptcha.java

你似乎使用IDE。重建您的项目,重新发布项目到服务器,重新启动服务器。同时检查服务器部署文件夹,并确保该servlet已编译并以BBS/WEB-INF/classes/other/MyCaptcha.class文件形式呈现。

如果是,你仍然有这个问题,那么这个servlet的建设/初始化失败(抛出了未捕获的异常)。阅读服务器日志以获取详细信息并相应地修复根本原因。

+0

我重新启动了服务器并重新构建并解决了问题:) tnx。我不知道在我的项目中添加servlet时必须这样做。 – sfrj

0

也许你可以只尝试Primefaces JSF组件库,其中包括一个验证码的组成部分。这很容易使用(只需放入你的页面)。

www.primefaces.org