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

标签 java jsf rest jsf-2

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

因此,我想问一下,因为我是新人,所以我是否完全错过了其他帖子中的某些内容。这里有几个简单的场景。

在 JSF 页面上,有一个数据表(基于 Primefaces 复选框的选择)。数据表显示可用记录(最多数千条)。数据表需要通过 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>

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

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

当我调用RESTful API插入记录后,API也会返回创建的记录。如何将此新记录插入到我的数据模型 #{testBean.sampleDataModel} 中,以便我不必再次加载整个表?我想我可以用纯 html 替换这个数据表,并使用 jQuery 将新记录附加到表中,但是我无法利用 JSF 中的选择表。

我有什么选择?

最佳答案

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

How to pass results from RESTful service to JSF components?

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

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

What's the best way to load the data? Is there a performance concern if every time I have to call the API from the server side (as opposed to client side using jquery and plain html)?

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

How can I insert this new record into my datamodel #{testBean.sampleDataModel} so that I don't have to load the entire table again?

请区分从数据库加载在jsf中加载。您可以对支持 bean 进行编程,以便仅在您认为有必要时调用数据库(这通常是最昂贵的操作)。据我所知,JSF 和 PrimeFaces 的 dataTable 实现都不能让您在行级别管理表内容:在每次 ajax 更新时,整个表都将被重新加载。然而,正如已经说过的,只要您正确地编程了支持 bean(即选择正确的 bean 范围避免在 getters 中调用数据库服务<),这就不会影响应用程序的性能。/strong>)。

有用的链接:

关于java - 如何将 RESTful api 的结果与 JSF 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18296328/

相关文章:

ruby-on-rails - 如何通过 curl 发布数组值?

java - Logback - 获取方法名称

java - 应用程序通常如何存储数据(用java)?

JavaFX如何将对话框/警报带到屏幕前面

java - 直接从 JSF/richfaces 访问基于 java 的 DOM 树

jsf - 日历隐藏在 Accordion 组件内

jsf - 摘要行在 p :dataTable not working

java - 如何使用Spring Boot处理Rest API中的异常

Java 代码陷入无限重复的 while 循环

c# - WCF Restful返回HttpResponseMessage想在设置内容时进行协商