Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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后端和javascript前端之间传输数据_Javascript_Html_Jsf_Jakarta Ee - Fatal编程技术网

在java后端和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

我正在创建一个JavaEEWeb应用程序。该应用程序使用Java作为服务器端编程语言,并使用Javascript作为客户端。Javascript位于HTML5文档中(出于特定原因需要)。我的Javascript需要一些来自服务器的数据来执行它的任务。这就给我留下了一个问题:如何用来自Java服务器的数据填充Javascript变量?

我正在考虑使用JSF并将HTML5和Javascript结合到其中。显然,首先呈现服务器端代码,然后将其发送到客户端。在这种情况下,我可以这样做:

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();