Enviornment:
我是JSF的新手,最近在尝试部署应用程序时遇到了一个奇怪的问题。
出于某种原因,除了bean之外,所有内容都会被部署。这开始时我注意到无论我做了什么,我都无法从facelet访问新创建的bean。然后我注意到我也无法使用在旧bean中创建的新函数。
我做了一个小实验,在我的登录bean中使用了一个现有的setter方法,并将其更改为:
public void setName(String name) {
this.name = name;
}
到
public void setName(String name) {
this.name = "not what was typed";
}
但是从下一页的bean中检索到的值是我在登录表单中输入的值。
我认为我的faces-config.xml和web.xml文件都设置正确。我搜索了问题,我发现唯一的事情是在bean声明之前添加@ManagedBean和@SessionScope注释可能有助于旧版本的JSF,但它没有用。
我尝试过创建一个新服务器并重新创建项目,但这也无济于事。以下是我的新项目(其中包含与旧项目相同的文件,正确创建的文件以及粘贴的内容)的错误:
An Error Occurred:
javax.el.PropertyNotFoundException: /login.xhtml at line 21 and column 42 value="#{loginBean.name}": Property 'name' not found on type com.tutorial.LoginBean
Caused by:
javax.el.PropertyNotFoundException - /login.xhtml at line 21 and column 42 value="#{loginBean.name}": Property 'name' not found on type com.tutorial.LoginBean
这是登录bean:
/**
* LoginBean.java
*
*/
package com.tutorial;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void savePerson(ActionEvent actionEvent) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Welcome "
+ name + " " + password + "!"));
}
}
这里我们有一个来自login.xhtml的片段,它使用LoginBean中的变量
<ui:define name="sideBar">
<p:accordionPanel multiple="true" activeIndex="0,1">
<p:tab title="Login" id="loginTab">
<h:form>
<h:panelGrid columns="1" style="width: 179px;" class="noBorder">
<h:outputLabel for="username" value="Username"></h:outputLabel>
<p:message for="username" id="msgUsername" />
<h:inputText id="username" value="#{loginBean.name}"
required="true" label="Username"></h:inputText>
<h:outputLabel for="password" value="Password"></h:outputLabel>
<p:message for="password" id="msgPassword" />
<h:inputSecret id="password" value="#{loginBean.password}"
required="true" label="Password">
</h:inputSecret>
<h:commandButton action="login"></h:commandButton>
</h:panelGrid>
</h:form>
</p:tab>
<p:tab title="Information">
Blah blah blah.
</p:tab>
</p:accordionPanel>
</ui:define>
任何人都知道问题是什么?
对于冗长的帖子感到抱歉。
答案 0 :(得分:1)
您是否清除了所有现有的编译代码?好像有一些旧课程闲逛。使用eclipse时有时会发生这种情况。
也可能是tomcat类路径与eclipse类路径不同。