java - JSF property not found -
i have little trouble simple jsf page, trying different solutions find here none of them work. me discover, why can't make simple example of jsf work?
this pom.xml
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.mkyong.core</groupid> <artifactid>primefaces</artifactid> <packaging>war</packaging> <version>1.0-snapshot</version> <name>primefaces maven webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>prime-repo</id> <name>primefaces maven repository</name> <url>http://repository.primefaces.org</url> <layout>default</layout> </repository> </repositories> <dependencies> <!-- primefaces --> <dependency> <groupid>org.primefaces</groupid> <artifactid>primefaces</artifactid> <version>4.0</version> </dependency> <!-- jsf 2 --> <dependency> <groupid>com.sun.faces</groupid> <artifactid>jsf-api</artifactid> <version>2.2.4</version> </dependency> <dependency> <groupid>com.sun.faces</groupid> <artifactid>jsf-impl</artifactid> <version>2.2.4</version> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> <version>1.2</version> </dependency> <!--servlet api provided tomcat--> <!--<dependency>--> <!--<groupid>javax.servlet</groupid>--> <!--<artifactid>servlet-api</artifactid>--> <!--<version>2.5</version>--> <!--</dependency>--> <dependency> <groupid>javax.servlet.jsp</groupid> <artifactid>jsp-api</artifactid> <version>2.1</version> </dependency> <!-- el --> <dependency> <groupid>org.glassfish.web</groupid> <artifactid>el-impl</artifactid> <version>2.2</version> </dependency> <!-- tomcat 6 need --> <dependency> <groupid>com.sun.el</groupid> <artifactid>el-ri</artifactid> <version>1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> </project>
this web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="webapp_id" version="3.0"> <!-- change "production" when ready deploy --> <context-param> <param-name>javax.faces.project_stage</param-name> <param-value>development</param-value> </context-param> <!-- welcome page --> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> <!-- jsf mapping --> <servlet> <servlet-name>faces servlet</servlet-name> <servlet-class>javax.faces.webapp.facesservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- map these files jsf --> <servlet-mapping> <servlet-name>faces servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>faces servlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>faces servlet</servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>faces servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> </web-app>
this faces-config.xml
<?xml version='1.0' encoding='utf-8'?> <faces-config version="2.2" 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-facesconfig_2_2.xsd"> </faces-config>
this view page index.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.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> </h:head> <h:body> <h:form> enter name <h:inputtext value="#{hellobean.input}" /> <h:commandbutton value="submit" action="#{hellobean.submit}" /> </h:form> <h:outputtext value="#{hellobean.output}" /> </h:body> </html>
this backing bean editorbean
package com.mykong.editor; import javax.faces.bean.managedbean; import javax.faces.bean.requestscoped; @managedbean @requestscoped public class hellobean { private string input; private string output; public void submit() { output = string.format("hello %s!", input); } public string getinput() { return input; } public string getoutput() { return output; } public void setinput(string input) { this.input = input; } }
the compilation goes right , deploy using command mvn tomcat:run
, when type on field , click submit button see exception:
javax.el.propertynotfoundexception: /index.xhtml @15,51 value="#{hellobean.input}": target unreachable, identifier 'hellobean' resolved null @ com.sun.faces.facelets.el.tagvalueexpression.gettype(tagvalueexpression.java:100) @ com.sun.faces.renderkit.html_basic.htmlbasicinputrenderer.getconvertedvalue(htmlbasicinputrenderer.java:95) @ javax.faces.component.uiinput.getconvertedvalue(uiinput.java:1046) @ javax.faces.component.uiinput.validate(uiinput.java:976) @ javax.faces.component.uiinput.executevalidate(uiinput.java:1249) @ javax.faces.component.uiinput.processvalidators(uiinput.java:712) @ javax.faces.component.uiform.processvalidators(uiform.java:253) @ javax.faces.component.uicomponentbase.processvalidators(uicomponentbase.java:1258) @ javax.faces.component.uicomponentbase.processvalidators(uicomponentbase.java:1258) @ javax.faces.component.uiviewroot.processvalidators(uiviewroot.java:1195) @ com.sun.faces.lifecycle.processvalidationsphase.execute(processvalidationsphase.java:76) @ com.sun.faces.lifecycle.phase.dophase(phase.java:101) @ com.sun.faces.lifecycle.lifecycleimpl.execute(lifecycleimpl.java:198) @ javax.faces.webapp.facesservlet.service(facesservlet.java:646) @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:290) @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206) @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:233) @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:191) @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:127) @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:102) @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:109) @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:298) @ org.apache.coyote.http11.http11processor.process(http11processor.java:857) @ org.apache.coyote.http11.http11protocol$http11connectionhandler.process(http11protocol.java:588) @ org.apache.tomcat.util.net.jioendpoint$worker.run(jioendpoint.java:489) @ java.lang.thread.run(thread.java:724) caused by: javax.el.propertynotfoundexception: target unreachable, identifier 'hellobean' resolved null @ com.sun.el.parser.astvalue.gettarget(astvalue.java:131) @ com.sun.el.parser.astvalue.gettype(astvalue.java:76) @ com.sun.el.valueexpressionimpl.gettype(valueexpressionimpl.java:195) @ com.sun.faces.facelets.el.tagvalueexpression.gettype(tagvalueexpression.java:98) ... 25 more
from pom.xml
- you're using jsf 2.2. , .xhtml
file uses http://java.sun.com/...
namespaces. problem lies in fact jsf 2.2 introduced new namespaces start http://xmlns.jcp.org/...
.
╔════════════════════════════════════════╦═════════════════════════════════════════╗ ║ old namespace ║ jsf 2.2 namespace ║ ╠════════════════════════════════════════╬═════════════════════════════════════════╣ ║ http://java.sun.com/jsf/core ║ http://xmlns.jcp.org/jsf/core ║ ║ http://java.sun.com/jsf/html ║ http://xmlns.jcp.org/jsf/html ║ ║ http://java.sun.com/jsf/facelets ║ http://xmlns.jcp.org/jsf/facelets ║ ║ http://java.sun.com/jsf/composite ║ http://xmlns.jcp.org/jsf/composite ║ ║ http://java.sun.com/jsp/jstl/core ║ http://xmlns.jcp.org/jsp/jstl/core ║ ║ http://java.sun.com/jsp/jstl/functions ║ http://xmlns.jcp.org/jsp/jstl/functions ║ ╚════════════════════════════════════════╩═════════════════════════════════════════╝
edit:
also faces-config.xml
should 2.2:
<?xml version='1.0' encoding='utf-8'?> <faces-config version="2.2" 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-facesconfig_2_2.xsd"> </faces-config>
update:
code tested on glassfish 4.0 , works fine, there must problem el2.2 , tomcat 6, see here details.
Comments
Post a Comment