2013-09-24 2 views
0

Я новичок в 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> 

ответ

1

Вы не можете использовать CDI аннотацию javax.enterprise.context.SessionScoped с JSF javax.faces.bean.ManagedBean. Вы либо пойти чистый JSF с

  • javax.faces.bean.ManagedBean (именование) и javax.faces.bean.SessionScoped (обзорное)

    ИЛИ Pure КДИ

  • javax.inject.Named (наименования) и javax.enterprise.context.SessionScoped (обзорное)

Связанные:

+0

Он работает сейчас, но это, кажется, как следует из названия, SessionScoped предотвращает изменения. Предположим, что я пытаюсь выполнить action = "# {user.testcase2()}" вместо action = # {user.testcase1()}, и я его сохраняю, каждый раз, когда я компилирую и упаковываю, я получаю действие = # {user.testcase1() } вместо обновленного action = # {user.testcase2()} как произвести изменения? – helpdesk

+0

Ваши изменения, которые не отображаются в вашем физическом файле на вашем диске, не имеют ничего общего с областью вашего управляемого компонента. Очистите и перестройте свой проект в своих идеях – kolossus

Смежные вопросы