我遇到了错误。我是JSF的新手。
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 :(得分:4)
在h:outputLabel
中,for
属性必须在JSF生命周期的早期阶段评估为String,而不能评估表达式"#{userbean.userName}"
。因此,您需要给它一个这样的String值:
<h:outputLabel for="userName" value="UserName" />
<h:inputText id="userName" value="#{userbean.userName}" label="UserName"/>
有关JSF生命周期的信息,请参阅this link:
恢复查看阶段 在此阶段,JavaServer Faces实现构建页面视图... 如果页面请求是初始请求,则为JavaServer Faces实现在此阶段创建一个空视图 生命周期进入渲染响应阶段,在此期间 空视图使用标记中引用的组件填充 页面。
因此,在渲染响应阶段(已经构建了(空)视图)之前,不会评估bean值。