Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 onload事件执行managebean方法_Java_Javascript_Jsf_Jsf 2 - Fatal编程技术网

从javascript onload事件执行managebean方法

从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

如何发出ajax请求,从javascript更新
?我目前正在使用
@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>