我仍然學習使用JSF 2中的組合組件的一些功能。我對JSF 1.2開發有經驗,最近我讀了Geary和Horstmann編寫的「Core Java Server Faces 3rd Edition」一書。JSF 2 - 如何在複合組件子項完成操作後執行操作?
我想要做的是創建一個包裝文件上傳組件(目前使用PrimeFaces <p:fileUpload>
)的複合組件。我需要將上傳的文件與會話作用域託管bean上的基於字符串的鍵關聯(稍後使用)。我試圖通過名爲'uploadedFileKey'的複合組件接口上的一個屬性來提供密鑰。下面是接口:
<html xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="uploadedFileKey"
type="java.lang.String"
required="true" />
</composite:interface>
...
</html>
的實現很簡單,使用PrimeFaces文件上傳標籤正如我前面提到。它需要一個帶有事件處理程序的託管bean,我也是基於來自PrimeFaces展示web應用程序的示例代碼創建的。下面是我的實現:
<composite:implementation>
<p:fileUpload
fileUploadListener="#{primeFacesFileUploadController.handler}"
label="Browse"
mode="advanced"
allowTypes="png,gif,jpg" />
</composite:implementation>
我不打算在這裏包括整個控制器豆,但這裏是類的聲明:
@ManagedBean(name="primeFacesFileUploadController")
@RequestScoped
public class PrimeFacesFileUploadController {
// ...
}
的PrimeFaces文件上傳是不是不像別人,我有看到。它使用Faces Servlet上的自定義Filter
來訪問上傳數據。實際的文件上傳部分工作正常,當上傳成功時,我將上傳的文件存儲在我的Tomcat服務器上的臨時文件中。
我的問題是不知道如何讓我的複合組件在成功上傳後採取行動。我希望我的複合組件將uploadedFileKey
存儲在Map
中的特定會話範圍的受管bean上,並將上傳的File
作爲映射值。我怎樣才能做到這一點?
這看起來像它會工作。謝謝Balus。 – 2011-06-07 00:47:18