4

私はJSF2.0を使用していますが、フォームは次のとおりです。

<h:form id="fff" onsubmit="reloadMap();">
    <h:selectOneMenu value="#{rentCarPoolBean.state}">
        <f:selectItems value="#{rentCarPoolBean.stateList}" id="stateList" />
        <f:ajax event="change" render="cities stateSelected" onevent="showAlert"/>
    </h:selectOneMenu>
    <h:selectOneMenu  id="cities" value="#{rentCarPoolBean.city}">
        <f:selectItems value="#{rentCarPoolBean.cityList}"/>
        </h:selectOneMenu>
    <h:outputText value="#{rentCarPoolBean.state}" id="stateSelected" />
</h:form>

そしてjavascript関数:

<script type="text/javascript">
    function showAlert(data){
         if (data.status == "complete")
             alert(document.getElementById("stateSelected"));   
    }
</script>

上記のコードは、最初のドロップダウンから状態を選択することで、ajax呼び出しを行い、「cities」ドロップダウンと「stateSelected」outputTextをレンダリングします。

また、showAlert()javascript関数を呼び出します。

私がやりたいのは、すべてのデータが返され、ドロップダウンとoutputTextの両方がレンダリングされた後でjavascript関数を呼び出すことです。

ただし、現在、要素がレンダリングされてアラートが表示される前にjavascript関数が呼び出されますnull。最終的にjavascript関数を実行するにはどうすればよいですか?

4

2 に答える 2

7

代わりにのステータスをフックする必要がありますsuccess。これは、HTMLDOMツリーが更新された後に実行されます。のステータスはcomplete、ajax応答が返された直後に実行されます。これは確かに誤解を招くステータス名ですが、beginステータスのように「HTTPリクエスト」のコンテキストで解釈するようにしてください。

もう1つの問題は、document.getElementById()JSFコンポーネントIDではなくHTML要素IDでアイテムを選択することです。JSFがHTMLに生成したIDを正確に指定する必要があります。webbrowserでページソースを表示することにより、適切なHTML要素IDを把握できます。

結局のところ、新しい関数は次のようになります。

function showAlert(data){
     if (data.status == "success")
         alert(document.getElementById("fff:stateSelected"));  
}
于 2012-05-15T17:16:46.633 に答える
0

ここ:

alert(document.getElementById("stateSelected"));

JSFコンポーネントIDのみを指定していますが、完全なclientIdを指定する必要があります。これを説明するリンクは次のとおりです。

于 2012-05-15T17:27:58.277 に答える