2013-07-21 45 views
0

我正在收到錯誤。我對JSF很陌生。Target Unreachable,標識符「Bean Name」已解析爲空

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) 

這裏是我的代碼:

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

您的UserBean擁有哪個範圍? – Manuel

+0

請發表「faces-config.xml」和「web.xml」 –

回答

4

h:outputLabel,該for屬性的值必須爲字符串在JSF生命週期的早期階段時相比,表達可以評估"#{userbean.userName}"。因此,你需要給它一個字符串值是這樣的:

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

this link關於JSF生命週期:

恢復視圖階段 在這個階段中,JavaServer Faces的實施建立的視圖頁面... 如果對該頁面的請求是初始請求,那麼JavaServer Faces實現將在此階段創建一個空視圖,並且生命週期將前進到Render Response階段,在此階段中 空白視圖將填充頁面中 中標籤引用的組件。

因此,在已經構建(空)視圖時,不會在渲染響應階段之前評估bean值。

+0

已經改變了你所說的代碼。但點擊按鈕後仍然出現同樣的錯誤 – Shankar

+0

而且你相應地更改了<'的第二個'',我想。 – perissf

+1

大家好,非常感謝很多已解決的問題,我只是運行它與maven目標tomcat:運行戰爭而不是tomcat:運行 – Shankar

相關問題