Java 从JSF代码调用web服务

Java 从JSF代码调用web服务,java,ajax,web-services,jsf,Java,Ajax,Web Services,Jsf,假设您在JSF中有一个表示层,并且您的业务层是使用web服务访问的。您将如何从JSF调用您的web服务 我曾考虑使用我的支持bean来调用web服务,但我只是想使用Ajax和JSF来连接web服务。你会选择什么?为什么?你能推荐其他的选择吗 编辑:我在业务层使用Spring,也许这些信息会对建议有所帮助 谢谢。我将web服务调用包装在一个服务类中,该类通过托管bean访问。因此,前端将不知道数据是如何通过web服务或任何其他方式到达的。我将实现EJB,并在应用程序中将其作为web服务公开(用于语

假设您在JSF中有一个表示层,并且您的业务层是使用web服务访问的。您将如何从JSF调用您的web服务

我曾考虑使用我的支持bean来调用web服务,但我只是想使用Ajax和JSF来连接web服务。你会选择什么?为什么?你能推荐其他的选择吗


编辑:我在业务层使用Spring,也许这些信息会对建议有所帮助


谢谢。

我将web服务调用包装在一个服务类中,该类通过托管bean访问。因此,前端将不知道数据是如何通过web服务或任何其他方式到达的。

我将实现EJB,并在应用程序中将其作为web服务公开(用于语言无关的远程访问)。我将通过查找和直接调用EJB来访问EJB(以获得更好的性能)。不幸的是,你没有告诉我你在使用什么平台,所以我不能确定我的建议是否可行

假设您在JSF中有一个表示层,并且您的业务层是使用web服务访问的。您将如何从JSF调用您的web服务

“经典”方法是在ManagedBean中注入JAX-WS代理工厂类(从WSDL生成):

public class ItemController {
    @WebServiceRef(wsdlLocation = "http://localhost:8080/CatalogService/Catalog?wsdl")
    private CatalogService service;

    public DataModel getItems() {
        if (model==null  || index != firstItem){
            model=getNextItems();
        }
        return this.model;
    }
    public DataModel getNextItems() {
        Catalog port = service.getCatalogPort();
        model = new ListDataModel(port.getItems( firstItem,batchSize));
        return model;
    }
}

示例取自。

+1我同意Bozho的观点-我喜欢将web服务调用保留在服务类中,并将表示层与将来发生的任何web服务更改隔离开来。再次感谢Bozho,我采用这种方法。我在业务层中使用Spring。