“Target Unreachable, identifier 'authenticator' resolved to null” in SEAM

北战南征 提交于 2019-12-13 20:43:10

问题


I am using jboss-seam-2.2.0.GA, authenticator class to authenticate the login process. When I enter the username and password and submit the page, I am getting following error message in my logs:

application E javax.el.PropertyNotFoundException: /login.xhtml @27,76 action="#{authenticator.login()}": Target Unreachable, identifier 'authenticator' resolved to null
 javax.faces.el.EvaluationException: javax.el.PropertyNotFoundException: /login.xhtml @27,76 action="#{authenticator.login()}": Target Unreachable, identifier 'authenticator' resolved to null
 at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
 at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
 at javax.faces.component.UICommand.broadcast(UICommand.java:387)

Following is the code :

<!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:


Your Authenticator class appears to be implemented correctly. I'd search further up in your logs and find out why it isn't being created.

Also, I'd suggest posting the relevant section from components.xml. Should be something like:

<security:identity authenticate-method="#{authenticator.login}"/>


来源:https://stackoverflow.com/questions/10389919/target-unreachable-identifier-authenticator-resolved-to-null-in-seam

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!