JSF从JavaScript调用托管bean方法

时间:2013-02-08 09:00:14

标签: javascript jsf-2

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

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

enter image description here

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

好的,我终于得到了它。

在命令链接中如果我使用动作则不转移。但是我将它改为actionListener并且它可以工作。

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

                                     </p:commandLink>

和我的Managed Bean方法

 public void viewDocs(ActionEvent action) throws IOException{
 FacesContext ctx = FacesContext.getCurrentInstance();
FacesContext.getCurrentInstance().getExternalContext().redirect("/Proj-war/faces" +      "/DocumentRepositary/documentsView" + ".xhtml");


}

答案 2 :(得分:0)

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

简单示例: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>

关于<f:viewParam>的使用情况,请查看this answer