Я новичок в JSF, Java EE, и я с ABIT о проблеме с помощью небольшого тестового примера я пытаюсь с Faces.xml, JSF и ManagedBeans ..Ошибка развертывания на Glassfish v.3 после использования @SessionScoped
У меня есть managedBean, называемый beanManager.java, и в нем у меня есть два поля (name и testname) и метод testcase1(), который просто возвращает строку. Теперь, на frontpage.xhtml, у меня есть текстовое поле ввода, которое получает имя от пользователя, и как только пользователь нажимает кнопку отправки, вызывается метод testcase1(), и все, что он делает, просто задает поле testname в BeanManager .java со входом пользователя, но по некоторым причинам - очевидно, почему я отправляю это сообщение - когда пользователь вводит имя и нажимает кнопку поиска, страница переходит к displaypage.xhtml, и страница ничего не отображает. Предполагается, что имя пользователя вводится пользователем, но оно пустое. Мне посоветовали использовать @SessionScoped вместо @RequestScoped, но сейчас проблема в том, что, когда я раскрываю мое приложение Java EE на GlassFish, я получаю следующее сообщение об ошибке:
Exception Occurred :Error occurred during deployment: Exception while loading the app :
java.lang.IllegalStateException: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException:
javax.servlet.ServletException: com.sun.enterprise.container.common.spi.util.InjectionException:
Error creating managed object for class: class org.jboss.weld.servlet.WeldListener
Ниже приведены мои файлы ..
BeanManager.java
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
@ManagedBean(name = "user")
@SessionScoped
public class BeanManager {
private String name = "";
private String testname = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String testcase1(){
setTestname(this.name);
return "test1";
}
public String getTestname() {
return testname;
}
public void setTestname(String testname) {
this.testname = testname;
}
}
frontpage.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="WEB-INF/templates/origin.xhtml">
<ui:define name="content">
<f:view>
<h:form>
<h:panelGrid>
<h:inputText value="#{user.name}" required = "true"/>
</h:panelGrid>
<h:commandButton
action="#{user.testcase1()}"
value="Search"></h:commandButton>
</h:form>
</f:view>
</ui:define>
</ui:composition>
</html>
displaypage.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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/WEB-INF/templates/origin.xhtml">
<ui:define name="content">
<h:panelGrid>
<h:outputText value="#{user.testname}"/>
<h:commandButton id="back" value="GoBack" action="frontpage"/>
</h:panelGrid>
</ui:define>
</ui:composition>
</html>
лица-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
<navigation-rule>
<from-view-id>/frontpage.xhtml</from-view-id>
<navigation-case>
<from-action>#{user.testcase1()}</from-action>
<from-outcome>test1</from-outcome>
<to-view-id>/displaypage.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/displaypage.xhtml</from-view-id>
<navigation-case>
<from-outcome>GoBack</from-outcome>
<to-view-id>/frontpage.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Он работает сейчас, но это, кажется, как следует из названия, SessionScoped предотвращает изменения. Предположим, что я пытаюсь выполнить action = "# {user.testcase2()}" вместо action = # {user.testcase1()}, и я его сохраняю, каждый раз, когда я компилирую и упаковываю, я получаю действие = # {user.testcase1() } вместо обновленного action = # {user.testcase2()} как произвести изменения? – helpdesk
Ваши изменения, которые не отображаются в вашем физическом файле на вашем диске, не имеют ничего общего с областью вашего управляемого компонента. Очистите и перестройте свой проект в своих идеях – kolossus