2014-01-13 5 views
1

클래스 정의 위에 @WebService 주석을 추가하고 관리 Beans 메소드에 @WebMethod 주석을 추가하여 jsf 관리 빈도 웹 서비스로 만들고 싶습니다.jsf @ManagedBean을 @WebService로 만드는 법

적어도 웹 스피어에서는 작동하지 않습니다.

삽입 된 세션 빈의 메소드를 호출하여 관리 Bean의 메소드가 일부 EJB 호출을 작성하고 있으므로 새 웹 서비스 클래스를 정의하고 @WebMethods에서 JSF 관리 Bean의 메소드를 호출하는 것이 작동하지 않습니다.

제안 사항?

답변

3

관리 빈이 페이지 상태를 유지하고 모든 트랜잭션 항목을 EJB에 위임하므로 관리 빈 메서드가 아닌 웹 서비스로 노출 될 수있는 방법을 사용하는 것이 좋습니다. EJB 것들.

업데이트 :이 작품은 TomEE + 1.6.0에서 저에게 잘 맞습니다.

package somepackage; 
import java.io.Serializable; 

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 

@ManagedBean 
@WebService 
@ViewScoped 
public class ManagedBeanAndWebService implements Serializable{ 

    private static final long serialVersionUID = 4479173603147480764L; 
    private String someAttribute="xyz"; 

    public String getSomeAttribute() { 
     return someAttribute; 
    } 

    public void setSomeAttribute(String someAttribute) { 
     this.someAttribute = someAttribute; 
    } 

    @WebMethod(operationName="methodName") 
    public void someWebMethod(String s){ 
     System.out.println(s); 
    } 
} 

과 XHTML

<?xml version="1.0" encoding="UTF-8" ?> 
<!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:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:pe="http://primefaces.org/ui/extensions"> 
<h:head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Test</title> 
</h:head> 
<h:body> 

    <h:form id="form"> 
     <p:outputLabel value="#{managedBeanAndWebService.someAttribute}"/> 
    </h:form> 
</h:body> 
</html> 

및 WS

enter image description here

+0

나는 그렇게하지만, 관리 빈 내에서 외부 프로그램을 호출하는 특정 경우에, 거기에 보통 것 및 호출자 메소드는 웹 서비스를 통해 액세스 할 수 있어야합니다. – fledglingCoder