2012-03-25 2 views
2

JBoss AS 7.1.0.Final에 배포합니다.왜 ViewScoped 빈이 살아남지 못합니다 h : commandButton?

나는 아주 간단한 테스트 응용 프로그램을 가지고 있습니다. 그것은 다른 날 (유명 마지막 단어)까지 예상대로 작동하고 있으며 더 이상 기본 요소를 수행하지 않습니다. 즉 입력 구성 요소의 값을 설정하고 동작 구성 요소에서 사용합니다. 나는 이걸 기본으로 없애고 무슨 일이 일어나는지 알 수 없다.

index.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"> 

<h:head> 
    <title>contacts</title> 
</h:head> 
<h:form> 
    <h:outputLabel value="Message:" /> 
    <h:inputText value="#{contactView.siteCode}" /> 
    <h:commandButton action="#{contactView.save}" value="Save" /> 

</h:form> 

</html> 

ViewScoped 콩은 내가 잘못하고있는 중이 야 여기에서

@Named 
@ViewScoped 
public class ContactView implements Serializable { 

    public ContactView() { 
    } 

    private String siteCode; 

    public String getSiteCode() { 
     System.out.println("getSiteCode: "+ siteCode); 
     return siteCode; 
    } 

    public void setSiteCode(String siteCode) { 
     System.out.println("setSiteCode: "+ siteCode); 
     this.siteCode = siteCode; 
    } 

    public String save(){ 
     System.out.println("Saving sitecode: " + siteCode); 
     return "index.jsf"; 
    } 


} 

여기입니까? 내가 저장 버튼을 클릭하면 나는 콩이되지 JSF @ManagedBean에 의해, CDI @Named에 의해 관리되기 때문이다 출력

10:50:37,663 INFO [stdout] (http--0.0.0.0-8080-2) setSiteCode: 22 
10:50:37,663 INFO [stdout] (http--0.0.0.0-8080-2) Saving sitecode: null 
10:50:37,663 INFO [stdout] (http--0.0.0.0-8080-2) getSiteCode: null 
+1

아마 다른 날에'@ Named' 대신'@ ManagedBean' 주석을 사용했을 것입니다. – Osw

답변

5

이 얻을. 패키지 javax.faces.bean의 JSF 범위 주석은 JSF가 관리하는 bean에서만 작동합니다. CDI 관리 빈에서는 javax.enterprise.context의 CDI 주석을 사용해야합니다. 그러나 CDI에는 뷰 범위 개념이 없습니다. 가장 가까운 값은 @ConversationScoped이지만 관리가 더 복잡합니다. CDI 관리 Bean에 | 위를 지정하지 않으면, 기본값으로 요청 | 위가됩니다.

@ViewScoped을 사용할 때마다 빈이 JSF에 의해 관리되는지 확인하십시오.

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class ContactView implements Serializable { 
    // ... 
} 

또한, 당신은 또한 당신이보기 범위를 유지하려는 때마다 액션 메소드가 null 또는 void을 반환하는지 확인해야합니다.

+0

설명해 주셔서 감사합니다. 나는 처음부터 @Named를 사용했다고 생각했지만, 그것은 내가 땜질 한 것 중 하나 여야합니다. 내 애플 리케이션을 기반으로 http://www.adam-bien.com/roller/abien/entry/simplest_possible_jsf_2_ejband 지금 그는 ManagedBean을 사용하는 것을 볼 수있다. 나는 그것을 변화시키는 기억이 없지만 무엇이든 가능하다. 최종 형식에서 URL의 매개 변수 목록에 리디렉션과 sitecode를 넣고 싶습니다. 나는 ViewScoped에 대한 필요성을 없애 준다고 생각합니다. – april26

+0

당신은 천만에요. – BalusC

+2

어제 나는 seam-faces가 Named와 함께 작동하는 ViewScoped 구현을 가지고 있음을 깨달았습니다. 그래서 내 앱이 Named와 함께 작동했습니다! 문제는 POM을 "정리"하기로 결정했을 때부터 시작되었습니다. 나쁜 생각. 처음에 왜 추가했는지 궁금해하는 솔기 - 얼굴을 제거했습니다. 3 일 후 마침내 왜 그런지 알게되었습니다! 아마도 나는 이것을 대답이 아니라 주석으로 추가해야합니다 ... – april26

관련 문제