简体   繁体   English

运行简单的JSF应用程序时出错

[英]Getting error while running a simple JSF application

I am getting following exception while I am trying to run a basic JSF application . 我在尝试运行基本的JSF应用程序时遇到异常。 I am using JSF1.1 , JDK 6 and tomcat 6.0.18 for the same. 我使用JSF1.1,JDK 6和tomcat 6.0.18相同。

exception 例外

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Error testing property 'lastname' in bean of type null
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)


root cause 

javax.faces.el.PropertyNotFoundException: Error testing property 'lastname' in bean of type null
    com.sun.faces.el.PropertyResolverImpl.getType(PropertyResolverImpl.java:342)
    com.sun.faces.el.impl.ArraySuffix.getType(ArraySuffix.java:240)
    com.sun.faces.el.impl.ComplexValue.getType(ComplexValue.java:208)
    com.sun.faces.el.ValueBindingImpl.getType(ValueBindingImpl.java:345)
    com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:111)
    javax.faces.component.UIInput.getConvertedValue(UIInput.java:713)
    javax.faces.component.UIInput.validate(UIInput.java:638)
    javax.faces.component.UIInput.executeValidate(UIInput.java:849)
    javax.faces.component.UIInput.processValidators(UIInput.java:412)
    javax.faces.component.UIForm.processValidators(UIForm.java:170)
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)
    javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:342)
    com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:78)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

Following are the files I have created for the same : 以下是我为同一文件创建的文件:

//jsfmbean.jsp //jsfmbean.jsp

<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<f:view>
<html>
<body bgcolor="cyan">
<h:form id="form1" >
<h:inputText id="text1" value="#{text2}" />
<h:inputText id="text2" value="#{player.lastname}" />
 <h:commandButton action="success" value="success" />
 <h:commandButton action="#{player.changeName}" value="failure" />
 </h:form>
</body>
</html>
</f:view>

//faces-config.xml //faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">



<faces-config>

  <application>

  <locale-config>

  <default-locale>en</default-locale>  

  </locale-config>

  </application>

  <navigation-rule> 


  <from-view-id> 
   /jsfevent.jsp 
  </from-view-id> 

  <navigation-case>
  <from-outcome>success</from-outcome> 
  <to-view-id>/mathew.jsp</to-view-id> 
   </navigation-case> 

   <navigation-case> 
   <from-outcome>failure</from-outcome> 
   <to-view-id>/amy.jsp</to-view-id> 
   </navigation-case> 
  </navigation-rule> 



  <navigation-rule> 
<from-view-id>/jsfmbean.jsp</from-view-id> 
<navigation-case> 
<from-outcome>success</from-outcome> 
<to-view-id>/mathew.jsp</to-view-id> 
</navigation-case> 
</navigation-rule> 

<managed-bean> 
<managed-bean-name>player</managed-bean-name> 
<managed-bean-class> 
ourdemo.player 
</managed-bean-class> 

<managed-bean-scope> 
session 
</managed-bean-scope> 

<managed-property> 
<property-name>firstname</property-name> 
<property-type>java.lang.String</property-type>
<value>Mahatma</value> 
</managed-property> 

<managed-property> 
<property-name>lastname</property-name> 
<property-type>java.lang.String</property-type>
<value>Gandhiji</value> 
</managed-property> 

</managed-bean>

</faces-config>

//Player.java //Player.java

package ourdemo; 
import javax.faces.context.*; 
import javax.faces.component.*; 
import javax.faces.validator.*; 
public class Player 
{ 
String firstname ;  
String lastname ; 


public void setFirstname(String a) 
{ 
firstname=a; 
} 
public String getFirstname() 
{ 
return firstname; 
} 
//---------- 
public void setLastname(String b) 
{ 
lastname=b; 
} 
public String  getLastname() 
{ 
return lastname; 
} 
//-------------------
public void changeName() 
{ 
lastname= firstname+" "+lastname; 
} 

} }

Please help ... 请帮忙 ...

#{player}指向的Bean尚未正确初始化,因此#{player.lastname}引发NullPointerException。

Java is case sensitive. Java区分大小写。 You've created a managed bean with full qualified class name of ourdemo.Player , but yet you're declaring the bean in faces-config.xml as ourdemo.player (note the lowercase p instead of the uppercase P ). 您已经创建了具有完全合格的类名ourdemo.Player的托管bean,但是您在faces-config.xml中将bean声明为ourdemo.player (请注意,小写字母p代替大写字母P )。 This way JSF can't find and create the bean class, which results that #{player} is null which in turn results in this exception. 这样,JSF无法找到并创建bean类,从而导致#{player}null ,从而导致此异常。

Fix it accordingly: 相应地修复它:

<managed-bean>
    <managed-bean-name>player</managed-bean-name> 
    <managed-bean-class>ourdemo.Player</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Unrelated to the concrete problem: I fully agree with Arjan Tijms in the question comment: use JSF 2.0 or newer if ever possible. 具体问题无关 :我完全同意Arjan Tijms的问题评论:尽可能使用JSF 2.0或更高版本。 JSF 1.1 is obsolete for over 5 years and has so many disadvantages. JSF 1.1已过时5年,并且有许多缺点。 If you're using JSF 1.1 due to business restrictions, convince your manager. 如果由于业务限制而使用JSF 1.1,请说服您的经理。 Or if you're using JSF 1.1 because you're reading outdated books/tutorials, throw them away and read the proper ones. 或者,如果您正在使用JSF 1.1,因为您正在阅读过时的书籍/教程,则将它们扔掉并阅读正确的书籍/教程。

Your faces-config.xml is wrong. 您的faces-config.xml错误。

class name declaration must be the same as 类名声明必须与

<managed-bean-class> 
ourdemo.Player 
</managed-bean-class> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在运行一个简单的Struts 2应用程序时遇到错误我正在使用Struts 2.5.10.1 - Getting error While running a simple Struts 2 application.I am using struts 2.5.10.1 运行springboot应用程序时出现错误 - Getting error while running springboot application 在eclipse上运行android应用程序时出现此错误 - getting this error while running android application on eclipse 运行服务器时出现错误 - Getting Error while running the server 运行简单的mapreduce作业时出现错误“ java.lang.OutOfMemoryError:Java堆空间” - Getting error “java.lang.OutOfMemoryError: Java heap space” while running simple mapreduce job 运行相机应用程序时出错 - Error while running an Camera application 运行简单的Hibernate应用程序时出现HibernateException“无法解析配置:hibernate.cfg.xml”错误 - HibernateException “Could not parse configuration: hibernate.cfg.xml” error while running a simple Hibernate Application 为什么我在运行简单的 Spring Boot 应用程序时总是得到状态为“404”的 Whitelabel 错误页面 - Why do I always get Whitelabel Error Page with status "404" while running a simple Spring Boot Application 运行Javafx应用程序时出错 - Error while running Javafx application 在Websphere Application Server 7上运行简单的JAX-RS应用程序时出现null错误 - Getting null error when running a simple JAX-RS app on Websphere Application Server 7
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM