从javascript onload事件执行managebean方法
如何发出ajax请求,从javascript更新从javascript onload事件执行managebean方法,java,javascript,jsf,jsf-2,Java,Javascript,Jsf,Jsf 2,如何发出ajax请求,从javascript更新?我目前正在使用@Postconstruct加载初始数据,但这大大延迟了初始页面加载 我正在考虑使用onload事件的HTML标记来触发请求并更新数据表。在jsf2.0中,您可以在几乎任何其他jsf标记中使用f:ajax标记,例如 <h:selectOneRadio id="myComponent" value="#{someBean.inputMethod}"> <f:selectItem itemValue="#{someBe
?我目前正在使用@Postconstruct
加载初始数据,但这大大延迟了初始页面加载
我正在考虑使用
onload
事件的
HTML标记来触发请求并更新数据表。在jsf2.0中,您可以在几乎任何其他jsf标记中使用f:ajax标记,例如
<h:selectOneRadio id="myComponent" value="#{someBean.inputMethod}">
<f:selectItem itemValue="#{someBean.A}" itemLabel="A" />
<f:selectItem itemValue="#{someBean.B}" itemLabel="B" />
<f:ajax event="click" action=#{someBean.someMethod} />
</h:selectOneRadio>
在本例中,someMethod在“myComponent”selectOneRadio的javasript onClick事件中执行
不确定这是否是您所追求的……理论上,下面应该这样做
与
public void onload(AjaxBehavior事件){
// ...
}
但是,由于某些原因,这是不受支持的。我曾经发过一篇关于这个的帖子
下面的工作,但它在本质上是一个黑客
JSF2.0 onload hack
window.onload=函数(){
document.getElementById('hidden:link').onclick();
}
如果您碰巧使用了PrimeFaces,那么您可以将其与一起使用
或者,如果您使用的是OmniFaces,那么您可以使用它的
onload()
在
的末尾呈现
。即将发布的OmniFaces2.2将通过以下方式消除这一需求
我通过使用元数据函数解决了这个问题,因为我无法使用@postcontract(在postcontract方法中抛出FacesMessages时,FacesMessages是排队的,不会显示…最后一条注释)
为此,我希望在页面加载后自动发出请求,因为PreRenderViewEvent可能可以解决您的问题
,但这不是异步理论,它应该可以工作。不起作用。但是隐藏按钮像charm一样起作用primefaces的东西起了作用,即使是重定向(只需从操作方法返回您想要的页面)@BalusC我无法打开问题报告超链接。这个问题解决了吗?这不会在JavaScript onload事件期间运行。这在网页从服务器发送到客户端之前就已经开始了。OP显式地要求在JavaScript onload事件期间运行bean方法。OP没有要求在JSF呈现响应阶段之前运行bean方法。
<f:metadata>
<f:viewAction action="#{bean.initProducts}" />
</f:metadata>
<h:body>
<ui:composition template="/templates/commonTemplate.xhtml">
<ui:define name="body">
<h:panelGroup>
<h:dataTable id="table"
value="#{bean.getProducts}" var="product"
<!-- Table Stuff-->
</h:dataTable>
</h:panelGroup>
</ui:define>
</ui:composition>