【问题标题】:Passing values between two separate jsf pages在两个单独的 jsf 页面之间传递值
【发布时间】:2012-12-19 12:30:46
【问题描述】:

我需要帮助!我花了几天的时间来寻找以下用例的解决方案。请原谅我没有代码。

一个 Web 输入/编辑表单:

用户详细信息 - 包含用户名、uploadfileName 等,以及“保存” 和“上传”按钮

  1. 用户填写详细信息
  2. 用户点击“上传”
  3. 系统打开 Primefaces 文件上传屏幕
  4. 用户上传图片
  5. 系统关闭 Primefaces FileUpload 自定义屏幕
  6. 系统用上传的文件更新uploadfileName outputText 文件名。
  7. 用户点击保存用户详细信息。
  8. 系统验证并保存用户详细信息。

Primefaces FileUpload 自定义屏幕:它嵌入在一个对话框中,并在一个单独的 xhtml 文件中(用于可重用性)。

问题是如何从上传对话框传递uploadfileName 值以更新调用(主)用户页面中的uploadfileName outputText。

例如,在 Vaadin 中,可以在 Trinidad 的情况下使用 ActionListener 或 ReturnActionListener。

感谢您的帮助(提前)。

【问题讨论】:

    标签: file-upload jsf-2 primefaces


    【解决方案1】:

    将 bean 放在视图范围内。然后,同一视图中的所有表单都可以使用同一个 bean 实例。

    @ManagedBean
    @ViewScoped
    public class Register {
        // ...
    }
    

    您可以相互注入视图范围的 bean。可以将上传表单的bean注入到注册表单的bean中,并在action方法中访问。

    @ManagedBean
    @ViewScoped
    public class Register {
    
        @ManagedProperty("#{upload}")
        private Upload upload;
    
        // ...
    }
    

    它是否是物理上独立的页面并不重要,只要您将它们包含在一个相同的主视图中,例如<ui:include> 或复合,则在回发之间保持相同的视图状态。

    【讨论】:

    • 感谢 BalusC,您的快速回复。如果您的解决方案有效,我会再回来感谢您。我已经在这个问题上浪费了很多时间,我需要休息一下。顺便说一句,这是否意味着包含 Primefaces FileUpload 的弹出 dialog.xhtml 不能包含 f:view?
    • 为什么要这样做?它最终只是同一个 HTML 页面的一部分,绝对不应该包含 <html><head><body>。请注意,我假设您使用的是<p:dialog>
    • 是的,你的假设是正确的。感谢您提供更多信息。
    • 不是将两个bean都设置为@ViewScoped,是否可以将UploadBean设置为@RequestScoped并将RegisterBean注入其中?之后,我们可以调用RegisterBean 的一些set 方法来更新上传项目的名称吗?
    • @Mr.J4mes:这适用于mode="simple",它通过非 ajax 提交上传,但如果上传是通过 ajax 进行的,这将不起作用,这在不同的请求中有效地发生提交。
    猜你喜欢
    • 2012-07-17
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多