Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
JSF从JavaScript调用托管bean方法_Javascript_Jsf 2 - Fatal编程技术网

JSF从JavaScript调用托管bean方法

JSF从JavaScript调用托管bean方法,javascript,jsf-2,Javascript,Jsf 2,有没有办法从JavaScript调用托管bean方法 我在一个数据表中有一个链接,该链接应转到相应投标的文档存储库。请检查屏幕截图。但是datatable位于面板内,它位于布局内,因此链接不会将页面转移到所需路径。因此,我试图从链接中调用一个JavaScript,该链接又从托管bean中调用一个方法,该方法将返回到所需页面。我试图隐藏一个按钮,并使其提交的链接点击。但它不起作用 要导航到require页面,您需要在f:param中传递所需的信息(例如,在您的情况下,传递唯一的id或编号,或者可能

有没有办法从JavaScript调用托管bean方法

我在一个数据表中有一个链接,该链接应转到相应投标的文档存储库。请检查屏幕截图。但是datatable位于面板内,它位于布局内,因此链接不会将页面转移到所需路径。因此,我试图从链接中调用一个JavaScript,该链接又从托管bean中调用一个方法,该方法将返回到所需页面。我试图隐藏一个按钮,并使其提交的链接点击。但它不起作用


要导航到require页面,您需要在f:param中传递所需的信息(例如,在您的情况下,传递唯一的id或编号,或者可能是投标编号之类的),并在其上调用ManagedBean方法。

确定最后我得到了它

在命令链接中,如果我使用操作,它不会转移。但我把它改成了actionListener,它很管用

 <p:commandLink id="submitButton" actionListener="#{docManagedBean.viewDocs(action)}" 
                                                     value="View Docs">

                                     </p:commandLink>
如果您只想在单击时执行导航,为什么不使用simple
?您可以设置
,以通知投标id或链接中的其他唯一值。由于您的投标搜索结果位于
中,我想,只需添加简单的链接即可导航到投标文件。我的观点是,从动作侦听器方法进行重定向实际上是设计中的一个大问题。如果要在页面上或在查看目标页面之前执行某些操作,可以使用命令按钮

简单示例:search.xhtml的一部分:

<ui:repeat var="tender" value="#{tenderBean.tenders}">
    <!-- UI part of table -->
    <h:link value="View tender docs"utcome="path/to/tender/docs/viewDocs.xhtml">
        <f:param name="tenderId" value="#{tender.id}" />
    </h:link>
</ui:repeat>

简单示例(续):viewDocs.xhtml的一部分:

<f:metadata>
    <f:viewParam name="tenderId" value="#{tenderDocsBean.tenderId}" required="true" />
    <f:event type="preRenderView" listener="#{tenderDocsBean.loadTenderDocs}" />
</f:metadata>


查看

的用法您能提供您正在使用的框架的规范吗?重复:使用primefaces、jsf 2.0,这可能是一个重复的问题。但他们给出的答案似乎对我不起作用。我们不能简单地在JavaScription中调用托管bean方法吗?您尝试过使用吗?因为我使用的是primefaces,我不确定这是否是原因。如果我使用h:link,它将显示为标签而不是链接。至于view docs.xhtml,我不想在jsf中获得值。但是我想要java托管Bean中的值,请同时查看这段代码,它将被转移到正确的页面。现在,我想在托管bean中获取id,并显示与我在MBean中查询的id相关的文档。我不会在你们的情况下使用这个按钮,因为你们想做的就是执行导航,正如我在回答中所说的。我认为get请求在这种情况下是合适的,因为用户将能够获得他在url中查看的投标书。如果要在单击按钮时加载页面,则可以使用以下代码:
。这将预设所需bean的值,并使其在查看文档页面加载期间可用。别忘了在commandButton的属性中添加ajax=“false”。它被转移到正确的页面。现在我想在我的托管bean中获取id,并显示与该id相关的文档。那么我应该怎么做呢?在util类上创建公共类Utils{private static Utils dnbUtils;private Utils(){}public static Utils getInstance(){if(dnbUtils==null){dnbUtils=new Utils();}返回dnbUtils;}公共字符串getRequestParam(字符串参数名){FacesContext context=FacesContext.getCurrentInstance();return(String)context.getExternalContext().getRequestParameterMap().get(parameterName);}}}托管Bean代码字符串值=Utils.getInstance().getRequestParam(“参数的名称”);logger.info(“+”值);好的,我用了u-r代码和它的工作原理。我没有使用FacesContext context=FacesContext.getCurrentInstance();context.getExternalContext().getRequestParameterMap().get(“tenderId”);这给了我所需的投标Id。但我仍然不明白这个Utils类是什么。但是谢谢。我根本没有使用Utils类。基本上,Utils类只是一个实用程序类,我们可以在其中指定JSF相关的功能。我们没有在ManagedBean中实现重复的代码,而是在Utils类中指定功能性&只需创建类的实例,然后访问ManagedBean中的方法。
<f:metadata>
    <f:viewParam name="tenderId" value="#{tenderDocsBean.tenderId}" required="true" />
    <f:event type="preRenderView" listener="#{tenderDocsBean.loadTenderDocs}" />
</f:metadata>