【问题标题】:Problem integrating Captcha in JSF 2.0 page在 JSF 2.0 页面中集成验证码的问题
【发布时间】:2011-03-07 09:57:21
【问题描述】:

我正在按照我在此页面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>

托管 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 的路径不正确。我怎么能解决这个问题?另外我想提一下,我不想添加更改图像选项,只有图像适合我。

【问题讨论】:

  • other.MyCaptcha 在哪里?它在类路径上吗?
  • 它在我的项目中,位于 C:\jee6workspace\BBS\src\other\MyCaptcha.java 我如何将它添加到类路径中?

标签: java jsf jakarta-ee jsf-2 captcha


【解决方案1】:

类路径中缺少 servlet。根据此评论

它在我的项目 C:\jee6workspace\BBS\src\other\MyCaptcha.java

您似乎正在使用 IDE。重建您的项目,将项目重新发布到服务器,重新启动服务器。还要检查服务器部署文件夹并确保 servlet 已编译并以 BBS/WEB-INF/classes/other/MyCaptcha.class 文件的形式显示。

如果是并且您仍然遇到此问题,则 servlet 的构造/初始化失败(它引发了未捕获的异常)。阅读服务器日志以获取详细信息并相应地修复根本原因。

【讨论】:

  • 我重新启动了服务器并再次构建并修复了问题:) tnx。我不知道在我的项目中添加 servlet 时我必须这样做。
【解决方案2】:

也许您可以尝试 Primefaces jsf 组件库,其中包含一个验证码组件。它非常易于使用(只需放入您的页面即可)。

www.primefaces.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 2011-07-08
    • 2013-03-01
    • 2011-06-29
    • 2011-07-09
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多