在java后端和javascript前端之间传输数据
我正在创建一个JavaEEWeb应用程序。该应用程序使用Java作为服务器端编程语言,并使用Javascript作为客户端。Javascript位于HTML5文档中(出于特定原因需要)。我的Javascript需要一些来自服务器的数据来执行它的任务。这就给我留下了一个问题:如何用来自Java服务器的数据填充Javascript变量? 我正在考虑使用JSF并将HTML5和Javascript结合到其中。显然,首先呈现服务器端代码,然后将其发送到客户端。在这种情况下,我可以这样做:在java后端和javascript前端之间传输数据,javascript,html,jsf,jakarta-ee,Javascript,Html,Jsf,Jakarta Ee,我正在创建一个JavaEEWeb应用程序。该应用程序使用Java作为服务器端编程语言,并使用Javascript作为客户端。Javascript位于HTML5文档中(出于特定原因需要)。我的Javascript需要一些来自服务器的数据来执行它的任务。这就给我留下了一个问题:如何用来自Java服务器的数据填充Javascript变量? 我正在考虑使用JSF并将HTML5和Javascript结合到其中。显然,首先呈现服务器端代码,然后将其发送到客户端。在这种情况下,我可以这样做: var data
var data = #{controller.getData};
如果这确实有效,那么有一个问题:数据是“静态的”。然而,我需要能够通过从服务器接收新数据来频繁更改此数据。但是,如果服务器端代码已经呈现,然后发送到客户端,那么对{controller.getData}
的每次调用都将返回相同的值
因此,这让我开始研究AJAX。JSF提供了一个AJAX Javascript库,但是,我似乎不明白如何使用它来更改HTML5文档(JSF页面)中Javascript代码中的变量。那么,同样,我如何用Java服务器的数据填充Javascript变量呢?如果您使用的是JSF,而没有任何组件库,那么您可以将脚本嵌入panelGroup并通过ajax重新呈现此面板:
<h:inputText id="mInput" value="#{myBean.name}">
</h:inputText>
<h:commandButton value="Do it" action="#{myBean.doit}">
<f:ajax render="thePanel" />
</h:commandButton>
<h:panelGroup id="thePanel">
<h:outputText value="#{myBean.name}" />
<script>
var myVar = '#{myBean.name}';
alert(myVar);
</script>
</h:panelGroup>
Primefaces的另一个可用选项是使用oncomplete属性:
<p:commandButton value="Do it" action="#{myBean.doIt}" oncomplete="alert('test');" />
我认为最简单的方法是定义一个隐藏变量:
<h:inputHidden id="hiddenData" value="#{controller.getData}" />
请注意,您必须在AJAX操作上重新呈现此隐藏值。此外,您还可以查看Richfaces提供的Ajax推送库。
希望能有所帮助。我想我要找的是一个Web服务,比如SOAP和REST。如果我想更新视图的这一部分,那么使用嵌入在JSF组件中的AJAX将非常有用。但是,我只需要出于特定原因从服务器获取数据。所以,我似乎可以在这个案例中使用Web服务。我可以在单例EJB或无状态EJB中使用
@path
注释使其成为RESTURI端点。然后,在Javascript代码中,我可以通过AJAX调用访问该URI端点,这将允许我访问一个方法并从EJB接收响应。我听说有几个人在客户端上使用JQuery,从Java后端从webservices(通过AJAX)获取数据;实际上,后端可以用任何服务器端语言编写。基本上,您可以用javascript向服务器上输出json的端点发出ajax请求。不是JavaEE用户,但这看起来是一个好的开始:这是什么端点?JavaEE类?我如何调用特定的方法?端点?您只需调用Servlet或在服务器中设置的任何内容。例如,”orders`可以是直接的servlet名称,也可以是映射的Struts 2操作,或者是您在服务器中设置的任何内容。您可以将Ajax与JQuery结合使用,这更简单、更理想。或者手工编码Javascript中的普通AJAX。
<h:inputHidden id="hiddenData" value="#{controller.getData}" />
var data = $('#hiddenData').val(); //using JQuery
var data = document.getElementByID("hiddenData").value();