2011-09-04 120 views
-1

我在尝试运行基本的JSF应用程序时出现以下异常。我使用的是JSF1.1,JDK 6和tomcat 6.0.18。运行简单的JSF应用程序时出现错误

例外

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) 

以下是我为同一创建的文件:

//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

<?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

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; 
} 

}

请帮助...

+0

>我使用JSF1.1 - 请你自己和其他人谁有权读取或与您的代码工作忙,至少使用JSF 1.2,但更好的JSF 2.0(适用于Tomcat 6)。如果有可能,请使用JSF 2.1。 –

回答

1

豆子指向#{player}尚未正确初始化,所以#{player.lastname}抛出一个NullPointerException。

1

Java区分大小写。您创建了一个具有完全合格类名称ourdemo.Player的托管bean,但是您仍然将faces-config.xml中的bean声明为ourdemo.player(请注意小写字母p而不是大写P)。通过这种方式,JSF无法找到并创建bean类,这导致#{player}null,这反过来导致此异常。

修复它的相应:

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

无关到具体的问题:我与阿尔扬Tijms完全同意在这个问题意见:使用JSF 2.0,或者如果可能过更新。 JSF 1.1已经过时5年多了,并且有很多缺点。如果您因业务限制而使用JSF 1.1,请致电convince。或者,如果您使用的是JSF 1.1,因为您正在阅读过时的书籍/教程,请将其扔掉并阅读正确的书籍。

1

Your faces-config.xml错误。

类名称声明必须是相同的

<managed-bean-class> 
ourdemo.Player 
</managed-bean-class> 
相关问题