Java 如何使jsf@ManagedBean同时成为@WebService

Java 如何使jsf@ManagedBean同时成为@WebService,java,web-services,jsf,jsf-2,ejb,Java,Web Services,Jsf,Jsf 2,Ejb,我想通过在类定义上方添加@WebService注释,并在托管bean方法中添加@WebMethod注释,使jsf托管bean也成为web服务 这不起作用,至少在websphere上不起作用 托管bean的方法通过调用注入会话bean的方法来进行一些EJB调用,因此,定义一个新的web服务类并从其@WebMethods调用JSF托管bean的方法也不起作用 有什么建议吗?我建议您使用一种方法,托管bean只保留页面状态,并将所有事务性内容委托给EJB,这样您就可以将托管bean方法公开为web服务

我想通过在类定义上方添加@WebService注释,并在托管bean方法中添加@WebMethod注释,使jsf托管bean也成为web服务

这不起作用,至少在websphere上不起作用

托管bean的方法通过调用注入会话bean的方法来进行一些EJB调用,因此,定义一个新的web服务类并从其@WebMethods调用JSF托管bean的方法也不起作用


有什么建议吗?

我建议您使用一种方法,托管bean只保留页面状态,并将所有事务性内容委托给EJB,这样您就可以将托管bean方法公开为web服务,而不是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


我建议您使用一种方法,其中托管bean只保留页面状态,并将所有事务性内容委托给EJB,这样您就可以将托管bean方法公开为web服务,而不是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


我通常会这样做,但有一种特殊情况是从托管bean中调用外部应用程序,调用器方法也必须通过web服务进行访问。我通常会这样做,但有一种特殊情况是从托管bean中调用外部应用程序,调用器方法还必须可以通过web服务访问。