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