簡體   English   中英

JSF 2 - 在復合組件子組件完成操作后,如何執行操作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM