JSF中的Javascript - “body onload =”vs tag

时间:2012-05-15 13:03:06

标签: javascript jsf-2 onload param

我正在尝试在我的一个JSF页面上使用javascript。不幸的是

<h:body onload="init('#{formBean.arrayAsString}')"> 

根本没有被召唤。我发现如果我在导航到导航到页面的导航情况下添加/重定向标记,则该函数将加载。不幸的是,这导致了另一个问题,因为导航我也传递了重要的f:param,因此formBean可以读取它。如果我使用/ redirect标签,则param值不再可用于读取。

如何在不使用重定向标记的情况下加载javascript init函数?或者也许我可以通过重定向以某种方式传递f:param值,但据我所知这是不可能的......

我在下面发布导航方法:

首先.xhtml页面:

<h:selectOneMenu id="selectMenu" value="#{indexBean.name_id}">
    <f:selectItems value="#{indexBean.myModelValues}" />    
    <f:ajax event="valueChange" render="button" execute="@this"/>       
</h:selectOneMenu>
                <h:commandButton id="button" value="Go to form Browse" action="form">
                  <f:param name="name" value="#{indexBean.name_id}" />                                       
                </h:commandButton> 

请记住,此按钮也会被h:selectOneMenu的ajax事件重新呈现,以传递所选值。

导航案例:

 <navigation-rule>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>   
            <from-outcome>
                form
            </from-outcome>
            <to-view-id>
                /form.xhtml
            </to-view-id>
            <redirect/>
        </navigation-case>
        </navigation-rule>

重定向标记是一个新的加载项,它启用了JavaScript init函数。

1 个答案:

答案 0 :(得分:2)

如果ajax调用了该操作,则会发生这种情况。使它成为非ajax行动。


更新:根据您的问题更新,将<a4j:commandButton>替换为<h:commandButton>,使其成为非ajax操作。顺便说一句,在JSF 2中,如果from结果已经等于视图ID,则不再需要导航案例。删除整个<navigation-rule>,您不需要它。