0

I m getting below error. I m new to JSF.

Jul 21, 2013 6:24:04 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute
WARNING: /index.xhtml @18,65 value="#{userbean.userName}": Target Unreachable, identifier 'userbean' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @18,65 value="#{userbean.userName}": Target Unreachable, identifier 'userbean' resolved to null
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:95)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1030)
    at javax.faces.component.UIInput.validate(UIInput.java:960)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1233)
    at javax.faces.component.UIInput.processValidators(UIInput.java:698)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at org.primefaces.component.panel.Panel.processValidators(Panel.java:284)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1214)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1172)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)

Here is my code:

package com.jsf.dev.bean;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;

@ManagedBean(name = "userbean")
public class UserBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private String userName;
    private String userPassword;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String login(){
        return "login";
    }
}

XHTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">

<h:head>

</h:head>
<h:body>
    <center>
        <p:panel header="Login Form" style="width:350;">
            <h:form>
                <h:panelGrid columns="2" cellpadding="2">
                    <h:outputLabel for="#{userbean.userName}" value="UserName" />
                    <h:inputText value="#{userbean.userName}" label="UserName"></h:inputText>
                    <h:outputLabel for="#{userbean.userPassword}" value="Password" />
                    <h:inputSecret value="#{userbean.userPassword}"></h:inputSecret>
                    <h:commandButton type="submit" value="Login"
                        action="#{userbean.login}"></h:commandButton>
                </h:panelGrid>
            </h:form>
        </p:panel>
        <div>
            <h:messages></h:messages>
        </div>
    </center>
</h:body>
</html>
Tiny
  • 27,221
  • 105
  • 339
  • 599
Shankar
  • 175
  • 2
  • 7
  • 17

1 Answers1

4

In h:outputLabel, the for attribute must evaluate to String in an earlier phase of the JSF lifecycle than when the expression "#{userbean.userName}" can be evaluated. Therefore, you need to give it a String value like this:

<h:outputLabel for="userName" value="UserName" />
<h:inputText id="userName" value="#{userbean.userName}" label="UserName"/>

See this link about JSF lifecycle:

Restore View Phase During this phase, the JavaServer Faces implementation builds the view of the page ... If the request for the page is an initial request, the JavaServer Faces implementation creates an empty view during this phase and the lifecycle advances to the Render Response phase, during which the empty view is populated with the components referenced by the tags in the page.

So, the bean value is evaluated not before the Render Response phase, when the (empty) view has already been built.

perissf
  • 15,979
  • 14
  • 80
  • 117
  • Have changed the code as you said. but still getting same error after click the button – Shankar Jul 22 '13 at 15:37
  • And you have changed correspondingly the second `` for the ``, I guess. – perissf Jul 22 '13 at 15:44
  • 1
    Hi All, Thanks a lot have resolved the issue i just run it with maven goal tomcat:run-war instead of tomcat:run – Shankar Jul 22 '13 at 15:49
  • good call Shankar, this worked for me also this is my run command in total "clean install tomcat7:run-war" If anybody can explain why this fixes this particular problem, it would be helpful – Michael Dausmann Apr 04 '15 at 22:53