2011-11-09 63 views
3

在我們當前的原型中,大部分標準的HTML控件被一個applet取代,最重要的是表單提交由applet觸發。JSF/Applet集成

有沒有一種方法來調用服務器端幾乎相同的方式執行相應的操作與

<h:commandButton action="#{ctrl.doit}"/>? 

本文Applet and JSF Integration - example有同樣的問題,但沒有一個合適的答案。從服務器的角度來看,applet是一種替代表單的形式。它填充專用(隱藏)字段並提交 - 不直接與服務器通信。

編輯

到目前爲止,據我所知,這些集成的可能性:

  • 添加(隱藏)UICommand並通過JavaScript
  • 觸發它
  • 實現自己的UICommand。據我所知,我會定義一個隱藏的參數來標記applet作爲表單提交控件,在請求處理週期中,UICommand實現將找出並觸發該操作。也許應該實現一個虛擬控件(與f:viewParam相比)作爲MethodExpressions的端點。
  • 將偵聽器附加到(隨機)控件或更一般的事件偵聽器,並在此處執行您的操作。在這種情況下,導航是如何完成的?
+0

分享你的代碼將會很棒。顯然,網絡上沒有很多Applet-JSF資源。問候, –

+1

這個applet集成歸結爲一個簡單的JavaScript調用。獲取JSObject.getWindow()並讓它「評估」將單擊隱藏的「確定」按鈕的JavaScript。 – mtraut

回答

3

這是而不是可能沒有物理JSF視圖在嵌入applet的同一頁中。所以,你應該至少有一個<h:form><h:commandButton>在同一頁,如果有必要隱藏CSS display: none;。這僅僅是因爲JSF需要在服務器端具有這種形式的視圖狀態,以防止類似於類似於攻擊的類似於CSRF的攻擊。如果在頁面中有一個物理<h:form>對您來說不是問題(您的特定情況下似乎是這樣),那麼您可以讓Applet填充字段(如果有)並單擊表格中的按鈕使用Applet-JavaScript通訊。

除此之外,一個簡單的servlet或真正的Web服務API(如JAX-RS/JAX-WS)確實是最好的方法。 JSF是一個基於組件的MVC框架,而不是一個web服務框架。這就是我在這個鏈接問題中的答案是試圖說明:使用正確的工具

+0

謝謝!無論如何,設計表單是必要的 - 我只是尋找一種方法來跳過隱藏的按鈕。該小程序不用作web服務客戶端。試想一下,它是一個奇特的按鈕實現。我會在關於實施這種行爲的問題上添加一些評論...... B.t.w - 你是一個非常出色的貢獻者。你總是提供準確的答案,快速,支持和可理解的。簡直太棒了。 – mtraut

+0

除了物理的'UICommand'組件,沒有其他方法可以調用託管bean操作。然而,你可以濫用'valueChangeListener'或鉤住一些setter方法,但這太糟糕了。 – BalusC

+0

對不起嘮叨 - 我昨天通過編輯添加了這首讚美詩,但你已經回答了我的承諾。以防萬一你錯過了它:-) – mtraut