Проблема интеграции капчи в страницу JSF 2.0 - PullRequest
1 голос
/ 07 марта 2011

Я следую учебному пособию, которое я нашел на этой странице 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>

Управляемый компонент:

@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 (источник можно найти по ссылке выше) - это сервлет, который я добавил в пакет с именем 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

Я думаю, что одна из причин, по которой я не могу реализовать это правильно, заключается в том, что путь к MyCaptcha.java в web.xml неверен. Как я могу это исправить? Также я хотел бы отметить, что я не хочу добавлять опцию изменения изображения, мне подходит только изображение.

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Сервлет отсутствует в пути к классам.Согласно этому комментарию

Это мой проект в C: \ jee6workspace \ BBS \ src \ other \ MyCaptcha.java

Вы, похоже, используете IDE.Перестройте свой проект, повторно опубликуйте проект на сервере, перезапустите сервер.Также проверьте папку развертывания сервера и убедитесь, что сервлет скомпилирован и представлен в виде BBS/WEB-INF/classes/other/MyCaptcha.class файла.

Если это так, и у вас все еще есть эта проблема, то создание / инициализация сервлета не удалась (этокинул неисследованное исключение).Подробности читайте в журналах сервера и исправьте основную причину.

0 голосов
/ 18 марта 2011

Может быть, вы могли бы просто попробовать библиотеку компонентов Primefaces jsf, которая включает компонент капчи. Его довольно просто использовать (просто поместите на своей странице).

www.primefaces.org

...