Управляемые компоненты не развертываются вместе с остальной частью приложения

Окружающая среда:

  • IDE: Затмение 3.7
  • Сервер: Томкэт 7.0
  • JSF 2.0

Я новичок в JSF, и недавно у меня возникла странная проблема при попытке развернуть приложение.

По какой-то причине все развертывается, кроме bean-компонентов. Это началось, когда я заметил, что независимо от того, что я делал, я не мог получить доступ к вновь созданному bean-компоненту из Facelet. Затем я заметил, что также не могу использовать новые функции, созданные в старых компонентах.

Я провел небольшой эксперимент, в котором я взял существующий метод установки в моем компоненте входа в систему и изменил его с:

public void setName(String name) {
    this.name = name;
}

to

public void setName(String name) {
    this.name = "not what was typed";
}

Но значение, которое было получено из bean-компонента на следующей странице, было значением, которое я ввел в форму входа.

Я думаю, что мои файлы Faces-config.xml и web.xml настроены правильно. Я погуглил проблему, и единственное, что я нашел, это то, что добавление аннотаций @ManagedBean и @SessionScope перед объявлениями bean-компонентов может помочь со старыми версиями 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

Вот компонент входа:

/**
* 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>

Кто-нибудь знает, в чем проблема?

Извините за длинный пост.


person Morglor    schedule 17.01.2012    source источник
comment
Можете ли вы предоставить свои faces-config.xml и web.xml?   -  person Mr.J4mes    schedule 17.01.2012


Ответы (1)


Вы очистили весь существующий скомпилированный код? Похоже, что вокруг висят какие-то старые классы. Это иногда происходит при использовании eclipse.

Также может быть, что путь к классу tomcat отличается от пути к классу eclipse.

person Milo van der Zee    schedule 17.01.2012
comment
Это был ответ. Чтобы заставить его работать, мне пришлось очистить проект, затем очистить сервер, а затем запустить проект. Если бы я очистил только один из них, компоненты не были бы правильно развернуты. - person Morglor; 21.01.2012