0

難しい問題があります。フォームを送信し、送信されたばかりのフォームのデータで (ワンクリックで) マップを更新する必要があります。送信されたデータは最新ですが、マップのデータは最後の呼び出しからのものです。アイデアは、どういうわけか oncomplete の前に更新が呼び出されることです。

コードは次のとおりです。

<h:panelGroup layout="block" id="addressBlock" >            
        <h:panelGrid columns="2" columnClasses="geolabels, geoinputs" id="addressInputs">
            Straße <h:inputText styleClass="sidebar-input" value="#{search.searchContainer.geoCodeSearch.adresse}" /> 
            Plz <h:inputText styleClass="sidebar-input" value="#{search.searchContainer.geoCodeSearch.plz}" />
            Ort <h:inputText styleClass="sidebar-input" value="#{search.searchContainer.geoCodeSearch.ort}" />
        </h:panelGrid>      
        <p:commandLink styleClass="btn" value="#{messages['global.search']}" process="@this, addressInputs"
            action="#{search.searchContainer.geoCodeSearch.geoCode()}" update="geoCodeResult, addressBlock"
            oncomplete="updateMap('#{dataForMap}', true);" />   
</h:panelGroup>
4

1 に答える 1

0

これは通常の動作であり#{dataForMap}、更新時ではなくレンダリング時に処理されます。

これでうまくいくはずです:

<p:commandLink styleClass="btn" value="#{messages['global.search']}" process="@this, addressInputs" action="#{search.searchContainer.geoCodeSearch.geoCode()}" update="geoCodeResult, addressBlock, dataForMap" /> 

<h:panelGroup id="dataForMap">
    <h:panelGroup rendered="#{dataForMap ne null}">
        <script>
            updateMap('#{dataForMap}', true);
        </script>
    </h:panelGroup>
</h:panelGroup>

#{dataForMap}が更新され、DOM が更新された後にスクリプトが実行されます。

于 2013-06-03T08:32:44.770 に答える