Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将RESTful api的结果与JSF集成?_Java_Jsf_Rest_Jsf 2 - Fatal编程技术网

Java 如何将RESTful api的结果与JSF集成?

Java 如何将RESTful api的结果与JSF集成?,java,jsf,rest,jsf-2,Java,Jsf,Rest,Jsf 2,如何将RESTful服务的结果传递给JSF组件?我读了很多帖子,但找不到一个简单的方法。尽可能使用RESTful API是我的应用程序的主要要求。性能也是一个关键因素,因为每天将处理数千个数据元素。如果我在JSF中找不到解决方案,我可能不得不切换到另一种技术 因此,我要问的是,既然我是新来的,我是否会从其他帖子中完全遗漏一些东西。下面是几个简单的场景 在JSF页面上,有一个datatable(基于Primefaces复选框的选择)。datatable显示可用记录(最多数千条)。需要通过RESTf

如何将RESTful服务的结果传递给JSF组件?我读了很多帖子,但找不到一个简单的方法。尽可能使用RESTful API是我的应用程序的主要要求。性能也是一个关键因素,因为每天将处理数千个数据元素。如果我在JSF中找不到解决方案,我可能不得不切换到另一种技术

因此,我要问的是,既然我是新来的,我是否会从其他帖子中完全遗漏一些东西。下面是几个简单的场景

在JSF页面上,有一个datatable(基于Primefaces复选框的选择)。datatable显示可用记录(最多数千条)。需要通过RESTful api动态加载datatable。下面是我的datatable的代码

    <p:dataTable id="addSampleTable" var="sample" value="#{testBean.sampleDataModel}"
            selection="#{testBean.selectedSamples}" >

    <p:column selectionMode="multiple" style="width:2%" /> 
    <p:column headerText="Sample">
        <h:outputText value="#{sample.name}" />
    </p:column>
</p:dataTable>

加载数据的最佳方式是什么?如果每次我都必须从服务器端调用API(而不是客户端使用jquery和纯html),是否存在性能问题

第二个场景,在同一页面上,还有一个按钮,允许用户通过另一个RESTful api添加新记录。反过来,新添加的记录应显示在数据表中

    <p:dataTable id="addSampleTable" var="sample" value="#{testBean.sampleDataModel}"
            selection="#{testBean.selectedSamples}" >

    <p:column selectionMode="multiple" style="width:2%" /> 
    <p:column headerText="Sample">
        <h:outputText value="#{sample.name}" />
    </p:column>
</p:dataTable>
在调用RESTful API插入记录之后,API还返回创建的记录。如何将这个新记录插入到数据模型#{testBean.sampleDataModel}中,这样就不必再次加载整个表了?我想我可以用纯html替换这个datatable,并使用jQuery将新记录附加到表中,但是我不能利用JSF中的选择表

我有什么选择

加载数据的最佳方式是什么?如果每次我都必须从服务器端调用API(而不是客户端使用jquery和纯html),是否存在性能问题

是的,存在性能问题。最好的方法是将集合加载到页面上下文中一次,并在此上下文中对列表进行操作。然后,一旦完成了所有更改,就可以与无状态REST服务同步

我如何将这个新记录插入到我的数据模型#{testBean.sampleDataModel}中,这样我就不必再次加载整个表了?我想我可以用纯html替换这个数据表,并使用jQuery将新记录附加到表中,但是我不能利用JSF中的选择表


不,你不必那么做!有几个JSF datatable实现使用AJAX部分提交,datatable代码已经包含了上面描述的逻辑。您在页面范围内的集合已使用新元素扩展,而无需再次重新为整个列表命名。

您的问题似乎太广泛,但我尝试给出一些答案

如何将RESTful服务的结果传递给JSF组件

您可以使用NetBeans人员实现的模式。如果您使用此IDE,则可以选择从数据库自动构建RESTful web服务。本质上,此模式在名为
AbstractFacade
的抽象泛型类中创建所有DAO基本功能。然后,对于JPA表示中的每个具体实体类,它创建一个扩展
AbstractFacade
的无状态类,并向其添加jax-rs注释,以便让它通过RESTful web服务公开实体类

然后可以通过EJB注入直接访问该服务。只需使用@EJB注释将您的服务注入任何容器管理的类中(在同一个应用程序中,但在使用可移植JNDI命名规则的其他应用程序中也是如此)。特别是,您将对在支持facelets组件的托管bean中注入facade类感兴趣

加载数据的最佳方式是什么?如果每次我都必须从服务器端调用API(而不是客户端使用jquery和纯html),是否存在性能问题

由于需要显示数千条记录,因此最好在数据表中使用Primefaces的延迟加载。然后,应用程序将仅为检索当前页面中显示的几十条记录而调用db。绝对避免显示超过这些记录的内容,否则客户端浏览器可能会受到负面影响

如何将这个新记录插入到数据模型#{testBean.sampleDataModel}中,这样就不必再次加载整个表了

请区分从db加载和在jsf中加载。您可以对支持bean进行编程,以便仅在您认为必要时调用db(这通常是最昂贵的操作)。据我所知,JSF和PrimeFaces的dataTable实现都无法在行级别管理表内容:在每次ajax更新时,整个表都将被重新加载。但是,如前所述,只要您正确地编程了支持bean(即选择正确的bean作用域,并且避免在getters中调用db服务),这不会影响应用程序的性能

有用链接:

  • 关于RESTful web服务
  • 关于Netbeans的RESTful web服务使用的模式
  • 关于延迟加载

虽然这个问题有点老,但它仍然是当前的问题。我对上面提到的anwsers不满意,因为上面提到的两种技术在一起是不匹配的

这里最重要的问题是:给定的RESTful API是否真的充当

  • 服务/业务层或
  • 。。。它是否只提供CRUD操作?如果它只提供典型的CRUD操作,那么它将充当持久层,并且需要一个服务层
在第二种情况下,您可以使用自己选择的技术实现服务层,JSF支持的bean甚至EJB都是不错的选择。在日本