Управляемые компоненты не развертываются вместе с остальной частью приложения - PullRequest
0 голосов
/ 17 января 2012

Среда:

  • IDE: Eclipse 3.7
  • Сервер: Tomcat 7.0
  • JSF 2.0

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

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

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

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

до

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

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

Я думаю, что мои лицаФайлы -config.xml и web.xml настроены правильно.Я погуглил проблему, и единственное, что я обнаружил, было то, что добавление аннотаций @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

Вот бин входа в систему:

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

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

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

1 Ответ

1 голос
/ 17 января 2012

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

Возможно также, что путь к классу tomcat отличается от пути к классу затмения.

...