[英]JSF 2 - How can I perform an action after a Composite Component child completes an operation?
我仍在學習使用 JSF 2 中的復合組件的一些功能。我對 JSF 1.2 開發經驗豐富,最近閱讀了《Core ZD52387880E1EA22817A72D37359213》一書。
我要做的是創建一個包含文件上傳組件的復合組件(當前使用 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 展示 webapp 中的示例代碼創建的。 這是我的實現:
<composite:implementation>
<p:fileUpload
fileUploadListener="#{primeFacesFileUploadController.handler}"
label="Browse"
mode="advanced"
allowTypes="png,gif,jpg" />
</composite:implementation>
我不會在這里包含整個 controller bean,但這里是 class 聲明:
@ManagedBean(name="primeFacesFileUploadController")
@RequestScoped
public class PrimeFacesFileUploadController {
// ...
}
PrimeFaces 文件上傳與我見過的其他文件沒有什么不同。 它使用 Faces Servlet 上的自定義Filter
來訪問上傳數據。 實際的文件上傳部分工作正常,上傳成功后,我將上傳的文件存儲在 Tomcat 服務器上的臨時文件中。
我的問題是不知道如何讓我的復合組件在成功上傳后采取行動。 我希望我的復合組件將uploadedFileKey
的文件密鑰存儲在特定會話范圍托管 bean 上的Map
中,並將上傳的File
作為 map 值。 我怎樣才能做到這一點?
我只需通過<f:attribute>
將密鑰作為自定義組件屬性傳遞並讓處理程序處理它。 您可以通過event.getComponent().getAttributes()
在處理程序方法中獲取它。
例如
<composite:implementation>
<p:fileUpload
fileUploadListener="#{primeFacesFileUploadController.handler}"
label="Browse"
mode="advanced"
allowTypes="png,gif,jpg">
<f:attribute name="key" value="#{cc.attrs.uploadedFileKey}" />
</p:fileUpload>
</composite:implementation>
和
public void handler(FileUploadEvent event) {
String key = (String) event.getComponent().getAttributes().get("key");
yourSessionBean.getMap().put(key, event.getFile());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.