只需添加到基肖爾的(半)的答案,你需要有一個待更新組件在您的視圖(彈出窗口,正如你所說的話)和Ajax的更新請求已成功後,完成。
您可以使用遠程命令發送帶有附加參數的AJAX請求,並且ajax更新負責成爲彈出窗口的JSF組件。像這樣(對於PrimeFaces 3。x)的:
<p:remoteCommand name="myRemote" actionListener="#{myBean.listen}"
update="dialog" oncomplete="dlg.show()" />
...
<div onclick="myremote([{name:'poi_id', value:poi_id}]);">...</div>
...
<p:dialog id="dialog" widgetVar="dlg">
<h:outputText value="#{myBean.address}" />
...(display other information)
</p:dialog>
與
String address;
public void listen(){
String poi_id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("poi_id");
address = getAddress(poi_id);
}
使用遠程命令的另一種方法是有一個隱藏的形式與將被用於發送所述參數給所述背襯豆一個隱藏的輸入,能夠
<h:form id="poi-form" styleClass="invisible">
<h:inputHidden id="poi" value="#{poiBean.poi}" />
<p:commandButton id="info" action="#{poiBean.info}"
update="dialog" oncomplete="dlg.show()" />
</h:form>
<div onclick="document.getElementById('poi-form:poi').value = poi_id;
document.getElementById('poi-form:info').click();">...</div>
...
<p:dialog id="dialog" widgetVar="dlg">
<h:outputText value="#{poiBean.address}" />
...(display other information)
</p:dialog>
與
:根據您的
poi_id
從其他豆類分開來處理的必要信息的檢索
@ManagedBean
@RequestScoped
public class PoiBean {
private String poi;//getter+setter
private String address;//getter
//other properties
public void listen(){
address = getAddress(poi);
//other properties
}
}
我爲您的良好答案添加了一個用例並修復了一些錯別字。隨意恢復到原來的,如果你想。 +1。 – skuntsel
Thx爲您的快速反應和良好的答案。 – Tugrul
可以listen()返回一個值嗎?如果是這樣,它如何在客戶端使用javascript? 也許它必須注入到一個HTML元素? – gromit190