2015-09-03 56 views
1

我得到了我開發的簡單登錄應用程序的下面的錯誤。 我已經在我的託管bean中提供了Session Scopen,並讓我的setters和getters可用。那爲什麼這個錯誤?JSF:Target Unreachable,'value'在JSF中返回null?

XHTML:

<!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> 
</h:head> 
<h:body> 

<h:form> 
<h2>Welcome </h2> 
<h:panelGrid columns="2"> 
<h:outputText value="Username" id="userName"></h:outputText> 

<h:inputText id="user" value="#{login.credential.username}" /><h:outputText  value="Password" id="userPassword"></h:outputText> 
<h:inputText id="password" value="#{login.credential.password}" /> 

</h:panelGrid> 
    <h:commandButton action="success" value="Login" /> 
</h:form> 
</h:body> 
</html> 

Login.java

package com.practice; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.SessionScoped; 
    @ManagedBean(name="login") 
    @SessionScoped 
    public class Login 
    { 

     private Credential credential; 

     public Login(){ 
      System.out.println("Login called"); 
     } 

     public Credential getCredential() { 
      return credential; 
     } 

     public void setCredential(Credential credential) { 
      this.credential = credential; 
     } 

     public String loginProcess(){ 
      System.out.println("Method called"); 
      return "success"; 
     } 

    } 

Credential.java

package com.practice;  
    import java.io.Serializable; 
    public class Credential implements Serializable { 

    private String username; 
    private String password; 
    public Credential(){ 
     System.out.println("Credential called"); 
    } 

    public String getUsername() { 
     System.out.println("Get username called"); 
     return username; 
    } 
    public void setUsername(String username) { 
     System.out.println("Set username called"); 
     this.username = username; 
    } 
    public String getPassword() { 
     System.out.println("Get password called"); 
     return password; 
    } 
    public void setPassword(String password) { 
     System.out.println("Set password called"); 
     this.password = password; 
    } 
} 

例外:

javax.servlet.ServletException: /index.xhtml @16,64 value="#{login.credential.username}": JBWEB006017: Target Unreachable, ''credential'' returned null 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) 
JBWEB000071: root cause 

javax.el.PropertyNotFoundException: /index.xhtml @16,64 value="#{login.credential.username}": JBWEB006017: Target Unreachable, ''credential'' returned 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:1030) 
    javax.faces.component.UIInput.validate(UIInput.java:960) 
    javax.faces.component.UIInput.executeValidate(UIInput.java:1233) 
    javax.faces.component.UIInput.processValidators(UIInput.java:698) 
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220) 
    javax.faces.component.UIForm.processValidators(UIForm.java:253) 
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220) 
    javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1220) 
    javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1164) 
    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:118) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 

請幫忙。

+0

全堆棧跟蹤 –

+0

我已粘貼異常 –

+0

嗨,請不要標記爲重複,,,這種解決方案根本沒有幫助... –

回答

0

在您發佈的代碼中,credential屬性從未初始化。我們是否從外面的某個地方撥打setCredential()

嘗試增強構造函數初始化否則credential默認值(是null定義:

public Login(){ 
    System.out.println("Login called"); 
    credential = new Credential(); 
} 

如果你調用setCredential()別的地方,你可能會認爲你怎麼稱呼它爲時已晚 - 也許以後該物業被評估爲顯示

相關問題