2014-04-27 42 views
0

嘗試了Primefaces文本窗體域時,我得到:目標不可達,標識符 'contactBean' 解析爲空

Warnung: /site/public/master/contact.xhtml @49,41 value="#{contactBean.firstname}": Target Unreachable, identifier 'contactBean' resolved to null 
javax.el.PropertyNotFoundException: /site/public/master/contact.xhtml @49,41 value="#{contactBean.firstname}": Target Unreachable, identifier 'contactBean' resolved to null 
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100) 
    at org.primefaces.renderkit.InputRenderer.findImplicitConverter(InputRenderer.java:170) 
    at org.primefaces.renderkit.InputRenderer.findConverter(InputRenderer.java:190) 
    at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:196) 
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1046) 
    at javax.faces.component.UIInput.validate(UIInput.java:976) 
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1249) 
    at javax.faces.component.UIInput.processValidators(UIInput.java:712) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261) 
    at org.primefaces.component.panel.Panel.processValidators(Panel.java:297) 
    at javax.faces.component.UIForm.processValidators(UIForm.java:253) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261) 
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261) 
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1205) 
    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:181) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:645) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:147) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'contactBean' resolved to null 
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:98) 
    at org.apache.el.parser.AstValue.getType(AstValue.java:82) 
    at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:172) 
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98) 
    ... 44 more 

ContactBean:

@Component(value="contactBean") 
@Scope("session") 
public class ContactBean implements Serializable { 

    /** 
    * UUID 
    */ 
    private static final long serialVersionUID = -3915579392551259507L; 

    private static Logger log = LogManager.getLogger(ContactBean.class); 

    public MailService mailService = new MailService(); 

    private String firstname; 
    private String surname; 
    private String email; 

    public String getFirstname() { 
     return firstname; 
    } 
    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public void savePerson(ActionEvent actionEvent) { 
     log.info("save Person and send mail"); 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Thank you very much for your request " + firstname + " " + surname + "!")); 

     String mailText = firstname + " " + surname + " " + email; 

    } 

} 

這就是我的contact.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" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"> 

<h:body> 

    <div> 

     <h:form id="form"> 

      <p:panel id="panel" header="Contact us!"> 

       <p:messages id="msgs" /> 

       <h:panelGrid columns="3"> 
        <h:outputLabel for="firstname" value="Firstname: *" /> 
        <p:inputText id="firstname" value="#{contactBean.firstname}" 
         required="true" label="Firstname"> 
         <f:validateLength minimum="2" /> 
        </p:inputText> 
        <p:message for="firstname" display="icon" /> 

        <h:outputLabel for="surname" value="Surname: *" /> 
        <p:inputText id="surname" value="#{contactBean.surname}" 
         label="Surname" required="true"> 
         <f:validateLength minimum="2" /> 
        </p:inputText> 

        <h:outputLabel for="email" value="Email: *" /> 
        <p:inputText id="email" value="#{contactBean.email}" label="Email" 
         required="true"> 
         <f:validateLength minimum="2" /> 
        </p:inputText> 

       </h:panelGrid> 

       <p:commandButton id="btn" value="Save" update="panel" 
        actionListener="#{contactBean.savePerson}" /> 
      </p:panel> 

     </h:form> 
    </div> 

</h:body> 


</html> 

我認爲問題必須與註釋,但我已設置@Components@Scope

我真的很感謝你的回答!

+0

不是一個真正的答案,但:你能試着用'@ SessionScoped'代替'@ Scope'註解?這是否適用於其他會話範圍的bean?此外,我會期望'@ManagedBean而不是組件註釋。你使用哪個框架的豆? – user3575404

回答

1

改變你的代碼是這樣的:

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.event.ActionEvent; 
import java.io.Serializable; 

@ManagedBean(name = "contactBean") 
@SessionScoped 
public class ContactBean implements Serializable { 
+0

Thx。現在工作! – mrquad

相關問題