內部remoteCommand我有以下情形:預處理/後處理,從p一個bean動作方法:複合
JSF與複雜的JavaScript,複合部件我想部分由JavaScript用新值從背刷新其bean(使用此複合組件的頁面的輔助bean,而不是支持組件@FacesComponent
)。 我不想完全更新,因爲它是複雜的JavaScript插件,它將不可接受地打破UX。
我從這裏,說明使用Primefaces的<p:remoteCommand>
有回調支持組件@FacesComponent
獲取值Best method for passing Data from Java/JSF2 bean to Javascript/jQuery Components
我知道這是JSF的一些弊端,但想封裝所有的功能在一個單一的單元和不與JAX-RS混淆如果你可以建議另一個很好的解決方案如何封裝這樣複雜的jQuery插件(爲了清晰起見,我們正在談論FullCalendar,我知道Primefaces有它自己的這個組件的實現,但它的功能不足以滿足我的要求,所以,我是需要做我自己的實現)與ajax回調高度相關的參數,你是高度w歡迎在這裏分享。
我的問題是如何使用JavaScript更新支持bean的後備組件@FacesComponent
中的值?目前,我參與了以下事件鏈:
從Javascript
<p:remoteCommand>
調用與傳遞給後盾組件@FacesComponent
參數要在AjaxBehaviorEvent
的JavaScript後出動:
refreshEvents([ {name:'start', value:start.format()}, {name:'end', value:end.format()} ]);
JSF代碼:
var hiddenField = $(document.getElementById(variables.hiddenId)); hiddenField.trigger("keypress");
在複合元件的重寫方法
public void queueEvent(FacesEvent event)
I:其中我通過使用getStateHelper().put(...);
jQuery的事件存儲在一個背襯部件
<p:remoteCommand name="refreshValues" oncomplete="loadValues()" action="#{cc.refreshLocal()}" process="@this"/>
參數從複合部件由下面的JavaScript代碼分派添加到此之前存儲的此
AjaxBehaviorEvent
屬性中,並在第一步中向其發送。從頁面中的「捕獲」,其中複合部件嵌套,並在此組件上執行
process
複合組件分派事件:<p:ajax event="refreshEvent" process="@this" listener="#{bean.refreshEvents}"/>
在
#{bean.refreshEvent}
方法I至@EJB
豆和負載數據進行請求。在從步驟1再次調用回調由
loadValues()
<p:remoteCommand name="loadValues" action="#{cc.getLocalData()}" oncomplete="updateValues(xhr, status, args);"/>
在背襯組件的方法
#{cc.getLocalData()}
我通過使用添加回調參數:RequestContext.getCurrentInstance().addCallbackParam("param", ...);
功能
updateValues(xhr, status, args)
從步驟5得到args
這個參數我的價值觀,並執行實際更新。
那麼,我的一般問題是有可能簡化這個過程,以及如何?
謝謝。
看看最新的PF快照或精英版本。它具有擴展功能。如果你使用PF,爲什麼不下載源代碼,創建一個補丁並提交它? – Kukeltje
有兩個問題。首先,我還沒有去,我有很多東西要學習。其次,由於我的工作政策,分享我們的代碼並不簡單,不是不可能,但不簡單。其實我只是看了源代碼。我認爲我可以通過重寫'protected void encodeEvents(FacesContext context,Schedule schedule)'來做到這一點,可能它並不像我想的那麼困難,謝謝你的支持。 – Anatoly
我的意思是提示:) – Anatoly