commandLink在启动oncomplete之前更新oncomplete的文本

时间:2013-06-03 08:24:54

标签: java jsf primefaces

我有一个棘手的问题。我需要提交一份表格并用表格中的数据更新地图(只需点击一下),该数据刚刚提交。现在,它的作用是:提交的数据是最新的,但地图的数据来自最后一次调用。我们的想法是在完成之前以某种方式调用更新。

以下是代码:

<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>

1 个答案:

答案 0 :(得分: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后执行脚本。