"Цель недостижима, идентификатор" аутентификатор "преобразован в ноль" в SEAM

Я использую jboss-seam-2.2.0.GA, класс аутентификатора для аутентификации процесса входа в систему. Когда я ввожу имя пользователя и пароль и отправляю страницу, в моих журналах появляется следующее сообщение об ошибке:

application E javax.el.PropertyNotFoundException: /login.xhtml @ 27,76 action = "# {authenticator.login ()}": цель недостижима, идентификатор "authenticator" преобразован в ноль
 javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /login.xhtml @27,76 action="#{authenticator.login()}": цель недостижима, идентификатор "authenticator" разрешен в ноль
 в javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
 в com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
 на javax.faces.component.UICommand.broadcast(UICommand.java:387)

Ниже приведен код:

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich" template="layout/noMenuTemplate.xhtml">
<ui:define name="body">
    <div id="content">
                <h:form id="loginForm">
        <rich:panel>
            <f:facet name="header">Login</f:facet>
            <h:messages />
<div class="dialog"><h:panelGrid columns="2" rowClasses="prop"
                columnClasses="name,value">
                <h:outputLabel for="username">Username</h:outputLabel>
                <h:inputText id="username" value="#{credentials.username}"
                    style="width: 150px;" />
                <h:outputLabel for="password">Password</h:outputLabel>
                <h:inputSecret id="password" value="#{credentials.password}"
                    style="width: 150px;" />
            </h:panelGrid></div>

            <div class="actionButtons"><h:commandButton id="submit"
                styleClass="button" value="Login" action="#{authenticator.login()}" /></div>
        </rich:panel>
        </h:form>
           </div>
</ui:define>
</ui:composition>

Authenticator.java

@Name("authenticator")
@AutoCreate
public class Authenticator {    
    @Logger Log log;
    @In Identity identity;
    @In Credentials credentials;
    @In Session hibernateSession;

    public Authenticator() {}

    public void login() throws IOException {
        log.debug("calling login method ............... ");

        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

        StringBuffer location = new StringBuffer(request.getContextPath());
        location.append("/j_security_check?j_username=");
        location.append((credentials.getUsername() != null) ? credentials.getUsername() : "");
        location.append("&j_password=");
        location.append((credentials.getPassword() != null) ? credentials.getPassword() : "");

        log.debug("LOCATION : " + location.toString());

        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
        response.sendRedirect(response.encodeRedirectURL(location.toString()));      
    }
}

1 ответ

Кажется, ваш класс Authenticator реализован правильно. Я бы продолжил поиск в ваших журналах и выяснил, почему он не создается.

Кроме того, я бы предложил опубликовать соответствующий раздел из components.xml. Должно быть что-то вроде:

<security:identity authenticate-method="#{authenticator.login}"/>
Другие вопросы по тегам