2013-06-18 2 views
1

javax.enterprise.context.SessionScoped에서 javax.faces.view.ViewScoped로 전환했습니다. ViewScoped를 사용할 수 있도록 2.1에서 2.2로 업그레이드되었습니다. 내 CDI 주사와 함께.WELD-001303 범위 형식에 대한 활성 컨텍스트가 없습니다. javax.faces.view.ViewScoped

ViewScoped로 전환 한 후에이 오류가 발생하기 시작했으며 그 이유를 알 수 없습니다! 여기에 뭔가 잘못되었다고 생각합니까? 글래스 피시 3.1.2, 3.4.2 Primefaces

, JSF 2.2

org.jboss.weld.context.ContextNotActiveException : 스코프 타입 WELD-001,303 어떠한 액티브 컨텍스트 javax.faces.view.ViewScoped하지

단추를 누르면 페이지가 열립니다.

jsf 페이지;

<h:form enctype="multipart/form-data"> 
    <p:fieldset legend="Create new feed" toggleable="true" collapsed="true" > 
     <p:fileUpload fileUploadListener="#{adminHomeController.handleFileUpload}" style="margin-top: 20px;" 
         mode="advanced" 
         update="messages" 
         sizeLimit="1000000" 
         multiple="false" 
         allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/> 
     <p:inputText label="Baslik" style="margin-top: 20px;" required="true" value="#{adminHomeController.newFieldset.legend}" /> 
     <p:editor style="margin-top: 20px;" 
        value="#{adminHomeController.newFieldset.content}" /> 
     <p:commandButton style="margin-top: 20px;" value="#{msg['common.save']}" update="messages" icon="ui-icon-disk" actionListener="#{adminHomeController.saveFieldset()}"/> 
    </p:fieldset> 
    <p:growl id="messages" showDetail="true"/> 
</h:form> 

컨트롤러;

import com.bg.entity.Fieldset; 
import com.bg.service.Service; 
import java.io.Serializable; 
import javax.annotation.PostConstruct; 
import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 
import javax.faces.view.ViewScoped; 
import javax.inject.Inject; 
import javax.inject.Named; 
import org.primefaces.event.FileUploadEvent; 

@Named 
@ViewScoped 
public class AdminHomeController implements Serializable{ 

    @Inject 
    private Service service; 
    private Fieldset newFieldset; 

    public AdminHomeController() { 
    } 

    @PostConstruct 
    public void init() { 
     System.out.println("INIT"); 
     newFieldset = new Fieldset(); 
    } 

    public void handleFileUpload(FileUploadEvent event) { 
     System.out.println("HandleFileUpload"); 
     byte[] file = event.getFile().getContents(); 
     newFieldset.setData(file); 
     FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

    public void saveFieldset() { 
     System.out.println("SaveFieldset"); 
     service.create(newFieldset); 
     FacesMessage msg = new FacesMessage("Succesful", newFieldset.getLegend() + " is saved."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
    } 

    /** 
    * @return the newFieldset 
    */ 
    public Fieldset getNewFieldset() { 
     System.out.println("getNewFieldset"); 
     return newFieldset; 
    } 

    /** 
    * @param newFieldset the newFieldset to set 
    */ 
    public void setNewFieldset(Fieldset newFieldset) { 
     System.out.println("setNewFieldset"); 
     this.newFieldset = newFieldset; 
    } 
} 
+1

JSF 2.2의 소스를 보지 않았으므로 범위를 어떻게 처리했는지는 알 수 없지만 수동으로 GlassFish에서 JSF를 업데이트하지 못한 것이있을 수 있습니다. GlassFish 4를 사용해 보셨습니까? – LightGuard

+1

이것이 효과가 있으면 나는 놀랄 것이다. 내가 아는 한, JSF 2.2는 Weld와의 추가적인 통합이 필요합니다. –

+0

@ LightGuard 맞습니다. GlassFish 4를 설치했으며 WELD-001303 예외없이 작동합니다. 제안 해 주셔서 감사합니다. 어쩌면 당신은 대답으로 받아 들일 것입니다 질문에 대답해야합니다! 건배 – Pinchy

답변

3

JSF 2.2에는 CDI 지원에 대한 추가 변경이 필요하므로 EE 7 서버를 사용해야합니다.