저는 JSF, Java EE을 처음 사용하며 Faces.xml, JSF 및 ManagedBeans를 사용하여 시험해 보는 작은 테스트 케이스에서 문제가 발생합니다.@SessionScoped를 사용한 Glassfish v.3에서의 배포 중 오류가 발생했습니다.
나는 beanManager.java라는 managedBean을 가지고 있는데, 두 개의 필드 (name과 testname)와 testcase1()이라는 메소드를 가지고있다. 이제 frontpage.xhtml에서 사용자로부터 이름을 가져 오는 입력 텍스트 상자가 있고 사용자가 제출 단추를 클릭하면 testcase1() 메서드가 호출되고 모든 것은 BeanManager의 testname 필드로 설정됩니다. .java 클래스를 사용자의 입력과 함께 사용할 수 있지만 이유는 무엇입니까? 분명히 이유는 무엇입니까? 사용자가 이름을 입력하고 검색 버튼을 누르면 페이지가 displaypage.xhtml로 이동하고 페이지에 아무 것도 표시되지 않습니다. 사용자가 입력 한 이름이 표시되지만 비어 있습니다. 내가 대신 @RequestScoped의 @SessionScoped를 사용하는 것이 좋습니다했지만 문제는 지금은 글래스 피쉬 내 자바 EE 응용 프로그램을 배포 할 때, 나는 다음과 같은 오류 얻을 수 있다는 것입니다 .. 다음은
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
,283,241,975,048,403,210displaypage.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.testcase1()} 대신 action = "user.testcase2()}"를 사용한다고 가정하고 컴파일하고 패키지 할 때마다 저장합니다. # {user.testcase1()} } 대신 업데이트 된 작업 = # {user.testcase2()} 변경 사항 적용 방법은 무엇입니까? – helpdesk
디스크의 실제 파일에 편집 내용이 표시되지 않는 것은 관리 빈의 범위와 아무 관련이 없습니다. 깨끗하고 귀하의 프로젝트를 귀하의 IDE에서 다시 빌드 – kolossus