Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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
如何通过JavaScript调用带参数的托管bean方法_Javascript_Jsf_Primefaces_Httprequest - Fatal编程技术网

如何通过JavaScript调用带参数的托管bean方法

如何通过JavaScript调用带参数的托管bean方法,javascript,jsf,primefaces,httprequest,Javascript,Jsf,Primefaces,Httprequest,我正在开发一个web应用程序,我使用JSF和PrimeFaces框架以及外部地理地图API RequestContext.getCurrentInstance().execute("your javascript code"); 当我点击地图上的一个POI时,MapAPI给了我POI\u id。但这对我来说还不够,我想从servlet获取关于POI的信息,并将其显示在弹出窗口中。(地址、姓名、电话号码等字段) RequestContext.getCurrentInstance().execut

我正在开发一个web应用程序,我使用JSF和PrimeFaces框架以及外部地理地图API

RequestContext.getCurrentInstance().execute("your javascript code");
当我点击地图上的一个POI时,MapAPI给了我
POI\u id
。但这对我来说还不够,我想从servlet获取关于POI的信息,并将其显示在弹出窗口中。(地址、姓名、电话号码等字段)

RequestContext.getCurrentInstance().execute("your javascript code");
因此,我需要在单击映射上的POI时向托管bean中的servlet发送HTTP请求

RequestContext.getCurrentInstance().execute("your javascript code");
我可以获取
poi_id
,但我无法将此id发送到后端托管bean,因此获取poi信息似乎是不可能的

RequestContext.getCurrentInstance().execute("your javascript code");
如何将
poi\u id
发送到我的托管bean并处理在弹出窗口中显示的响应?

您可以使用(

RequestContext.getCurrentInstance().execute("your javascript code");
RemoteCommand允许执行支持bean方法并执行部分操作 由自定义客户端脚本触发的更新

RequestContext.getCurrentInstance().execute("your javascript code");
按以下方式将其添加到视图中:

<p:remoteCommand name="myRemote" actionListener="#{myBean.listen}"/>
RequestContext.getCurrentInstance().execute("your javascript code");
为了补充Kishor(中途)的答案,您需要在视图(您称之为弹出窗口)中有一个待更新组件,并在请求成功完成后进行ajax更新

RequestContext.getCurrentInstance().execute("your javascript code");
您可以使用remote命令发送带有附加参数的AJAX请求,AJAX将负责作为弹出窗口的JSF组件更新。与此类似(对于PrimeFaces 3.x):

RequestContext.getCurrentInstance().execute("your javascript code");
使用远程命令的替代方法是使用一个带有隐藏输入的隐藏表单,该表单将用于将参数传输到支持bean,该参数可以与其他bean分离,以根据您的
poi_id
处理必要信息的检索:

RequestContext.getCurrentInstance().execute("your javascript code");
<h:form id="poi-form" styleClass="invisible">
    <h:inputHidden id="poi" value="#{poiBean.poi}" />
    <p:commandButton id="info" action="#{poiBean.info}"
                     update="dialog" oncomplete="dlg.show()" />
</h:form>
<div onclick="document.getElementById('poi-form:poi').value = poi_id; 
              document.getElementById('poi-form:info').click();">...</div>
...
<p:dialog id="dialog" widgetVar="dlg">
    <h:outputText value="#{poiBean.address}" />
    ...(display other information)
</p:dialog>

我为您的好答案添加了一个用例,并修复了一些拼写错误。如果您愿意,可以随时恢复到原始版本+1.listen()能否返回一个值?如果是这样,如何在客户端javascript中使用它?或者它必须被注入到HTML元素中?