I am just testing out this JSF page, so I don't set the action attribute in the <h:commandButton/>. This is a very simple form with 3 input boxes for First Name, Last Name, and Email, and one button called Save. Every time I click that button, I receive this error
javax.el.PropertyNotFoundException: /index.xhtml @19,106 value="#{person.firstName}": Target Unreachable, identifier 'person' resolved to null but if I annotate my JavaBean @ManagedBean, then the form go through just fine, but every time I switch back to using @Named Bean, I receive that error again. I have tried some of the suggestions I found on this site such as restarting the server, checking the presence of the getters, but those did not help.
<?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.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <meta charset="UTF-8" /> <title>Simple Form Created Using Facelets</title> </h:head> <h:body> <h:messages/> <h:form> <h:panelGrid columns="2" columnClasses="rightColumn, leftColumn"> <h:outputLabel for="firstName" value="First Name:" /> <h:inputText id="firstName" value="#{person.firstName}" label="First Name"/> <h:outputLabel for="lastName" value="Last Name:" /> <h:inputText id="lastName" value="#{person.lastName}" label="Last Name"/> <h:outputLabel for="email" value="Email:"/> <h:inputText id="email" value="#{person.email}" label="Email" /> <h:panelGroup /> <h:commandButton value="Submit"/> </h:panelGrid> </h:form> </h:body> </html> This is my JavaBean class
import javax.annotation.PostConstruct; import javax.faces.bean.RequestScoped; import javax.inject.Named; @Named @RequestScoped public class Person { private String firstName = "empty"; private String lastName = "empty"; private String email = "empty"; public void Person() {} public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } This is the web.xml file.
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>
/WEB-INF/beans.xml?RequestScopedshould bejavax.enterprise.context.RequestScopedforCDI. Do not mix theJSFscope andCDIscope.