java - 如何使 jsf @ManagedBean 也成为 @WebService

标签 java web-services jsf jsf-2 ejb

我想通过在类定义上方添加 @WebService 注释并将 @WebMethod 注释添加到托管 bean 方法来使 jsf 托管 Bean 也成为 Web 服务。

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

托管 bean 的方法通过调用注入(inject)的 session bean 的方法来进行一些 EJB 调用,因此,定义新的 Web 服务类并从其 @WebMethods 调用 JSF 托管 bean 的方法也不起作用。

有什么建议吗?

最佳答案

我建议您使用一种方法,其中托管 Bean 仅保留页面状态,并将所有事务内容委托(delegate)给 EJB,这样您就可以将 EJB 而非托管 Bean 方法公开为 Web 服务的。

更新:这适用于我的 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

关于java - 如何使 jsf @ManagedBean 也成为 @WebService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21088029/

相关文章:

javac 在当前文件夹中找不到另一个已编译的类

java - WSDL 抽象消息与具体消息

jsf - 如何在 h :inputTextarea 中显示 HTML

java - Axis2 ByteArray Web 服务以字符串形式返回

web-services - Amazon EC2 - 选择哪个 Ubuntu 服务器 : 32bit or 64bit?

ajax - JSF Ajax Link 在链接 Action 之前执行部分ajax渲染

javascript - 在 jsf 的更改值监听器之后将焦点设置到下一个输入元素

Java 点对点聊天应用程序

java - 获取JDBC连接失败;嵌套异常是 java.sql.SQLException : null

java - 数组列表中最长的数字序列