gpt4 book ai didi

java - JSF 2 - 如何在复合组件子项完成操作后执行操作?

转载 作者:行者123 更新时间:2023-11-30 11:53:28 26 4
gpt4 key购买 nike

我仍在学习使用 JSF 2 中复合组件的一些功能。我在 JSF 1.2 开发方面经验丰富,并且最近阅读了 Geary 和 Horstmann 合着的“Core Java Server Faces 3rd Edition”一书。

我想做的是创建一个包装文件上传组件的复合组件(当前使用 PrimeFaces <p:fileUpload>)。我需要将上传的文件与 session 范围的托管 bean 上基于字符串的 key 相关联(稍后使用)。我正在尝试通过名为“uploadedFileKey”的复合组件接口(interface)上的属性提供 key 。这是界面:

<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 fileUpload 标记。它需要一个带有事件处理程序的托管 bean,我也是根据 PrimeFaces showcase webapp 中的示例代码创建的。这是我的实现:

<composite:implementation>
<p:fileUpload
fileUploadListener="#{primeFacesFileUploadController.handler}"
label="Browse"
mode="advanced"
allowTypes="png,gif,jpg" />
</composite:implementation>

我不打算在这里包括整个 Controller bean,但这里是类声明:

@ManagedBean(name="primeFacesFileUploadController")
@RequestScoped
public class PrimeFacesFileUploadController {
// ...
}

PrimeFaces 文件上传与我见过的其他文件没有什么不同。它使用自定义 Filter在 Faces Servlet 上访问上传数据。实际的文件上传部分工作正常,当上传成功时,我将上传的文件存储在我的 Tomcat 服务器上的临时文件中。

我的问题是不知道如何让我的复合组件在成功上传后采取行动。我希望我的复合组件存储 uploadedFileKeyMap在具有上传的 File 的特定 session 范围的托管 bean 上作为 map 值。我该怎么做?

最佳答案

我只是通过 <f:attribute> 将 key 作为自定义组件属性传递并让处理程序处理它。您可以通过 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());
}

关于java - JSF 2 - 如何在复合组件子项完成操作后执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com