java - 目标无法到达,标识符 'contactBean' 解析为 null

标签 java jsp jsf primefaces

当尝试使用 Primefaces 文本表单字段时,我得到:

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

非常感谢您的回答!!!

最佳答案

像这样更改您的代码:

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 {

关于java - 目标无法到达,标识符 'contactBean' 解析为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23320828/

相关文章:

java - 根据其中的值的增加和减少来拆分未排序的列表

jsf - JSF 应用程序中可添加书签的 URL - 尝试使用 Spring Webflow 和 JSF。有什么建议么?

java - JSF: p:dataTable with f:attribute 导致 "argument type mismatch"错误

java - Keytool 设置主机名

java - twitter4j 配置

java - 检查导航栏

java - 如何在JSP中迭代一个对象来获取百分比?

javascript - 如何从 iframe 打开弹出窗口

java - 如何将对象从 Controller 传递到jsp页面,然后迭代该对象以将它们显示在表格中?

jsf - 根据 selectOneMenu 值有条件地渲染组件