我有一個JSF頁面,用戶可以在其中輸入他們的車到我的數據庫。形式有三個輸入字段:對話範圍意外行爲
- 廠商
- 模型
- 登記
的Manufacturer
和Model
字段都是自動完成的字段。爲了完成Model
字段,我需要知道用戶在提交表單之前在Manufacturer
字段中選擇了什麼值。爲此,我成立了一個AJAX調用通知選定值的託管bean:
<p:autoComplete id="manufacturer"
minQueryLength="3"
completeMethod="#{carController.complete}"
forceSelection="true">
<p:ajax event="itemSelect"
listener="#{carController.manufacturerSelected}" />
</p:autoComplete>
而在託管bean:
public void manufacturerSelected(SelectEvent se) {
manufacturer = se.getObject().toString();
}
該模型的外觀自動完成場和處理方法大致相同,價值略有不同。
要保留在多個XHR請求manufacturer
價值,我已經設置了bean來ConversationScoped
,並開始在@PostConstruct
標註的方法談話:
@Named
@ConversationScoped
public class CarController implements Serializable {
@Inject
private Conversation conversation;
@PostConstruct
private void init() {
conversation.begin();
}
什麼我希望是bean只得到實例化一次因爲對話尚未結束,並保留manufacturer
字段中的值。但是,這並不適用,並且對於每個XHR請求再次實例化bean,導致manufacturer
字段也爲null
。在PostConstruct
方法中設置斷點顯示它實際上已被調用,方法manufacturerSelected
也是如此。
我懷疑這與我沒有手動傳播對話ID的事實有關,但文檔說這個ID應該自動傳播任何faces請求。這實際上是否正確,這是否意味着XHR請求不一定是面對請求?
編輯:在豆的不同位置設置斷點透露,每個XHR請求有一個新的bean(conversation.getId()
不斷變化),所以我顯然不傳播正確的ID。如何用p:ajax傳播ID,我可以在哪裏用EL獲得它?
雖然對話可能不是這裏的方法,但您可以通過例如firebug或burpproxy調試實際的ajax請求,以查看真正發送的內容。 –