【问题标题】:Problem With JSF 1.1 and PopUpJSF 1.1 和 PopUp 的问题
【发布时间】:2010-01-29 22:09:43
【问题描述】:

当有人单击数据表上的按钮时,我试图弹出一个窗口。

                                    <h:commandButton
                                        action="#{cacheController.popupDetails}"
                                        immediate="false"
                                        onclick="popup()"
                                        value="View Details"
                                         styleClass="submit">
                                    </h:commandButton>

相关的弹出功能是

function popup() {
window.open('RDDetails.jsf','popupWindow', 'dependent=yes, menubar=no, toolbar=no, height=500, width=400');
}

现在在新的“RDDetails.jsf”文件中,我试图访问同一个 managedBean cacheController。但问题是,弹出窗口和 JSF 生命周期不同步。结果,弹出窗口首先显示空白,当我刷新时,它会提取正确的数据。

无论如何我可以单击一个按钮,该按钮将在托管 bean 中进行一些处理,然后打开一个弹出窗口,从托管 bean 中检索处理过的数据。

我正在使用 JSF 1.1。

【问题讨论】:

    标签: jsf


    【解决方案1】:

    您在这里基本上触发了两个 独立请求:一个与表单提交相关联,另一个在弹出窗口中打开RDDetails.jsf。您需要将其合并到 一个 请求中。您可以通过两种方式实现这一点:

    1. 摆脱onclick,只需将target="_blank" 添加到&lt;h:form&gt;,以便将其提交到新窗口/标签中。

    2. 通过将return false; 添加到onclick 来阻止默认操作,并在与RDDetails.jsf 关联的bean 的构造函数中执行业务逻辑。唯一的(主要)警告是模型不会使用表单字段进行更新。因此,您需要在 JavaScript 的帮助下手动将表单字段作为弹出 URL 的请求参数传递。然后,您可以利用 faces-config.xml 中的托管属性条目将 GET 请求参数注入模型。

    第一种方法显然是最简单的,但这并没有给你一个“完全值得”的弹出/模态对话框。第二种方法有点困难(除非您已经很好地掌握了 JavaScript 和 JSF)。然后我会考虑寻找一个提供现成弹出组件的组件库。

    【讨论】:

    • 我正在尝试像这样从支持 bean 创建 URL - onclick="#{cacheController.url}" 并且 url 将具有 JSp 样式参数 ?param=value&param2=value2 等。做你认为这会奏效吗?
    • 不行,你需要用同样的方式通过window.open()传递url。
    • 是的,我正在这样做 - 这是我在支持 bean 中的 getURL 方法 - public String getUrl() { selectedRD = (RuleDisplayTO) dataTable.getRowData(); return "window.open('/e2fo/tools/cachetool/test.jsp?name=" + selectedRD.getName() + "','popupWindow', 'dependent=yes, menubar=no, toolbar=no, height= 500, 宽度=400');返回假;"; }
    【解决方案2】:

    看我的例子:

    <h:commandLink action="#{controller.myAction}" onmousedown="document.forms['idform'].target='_blank';">
    

    我正在使用 jsf 1.1

    【讨论】:

    • 您也可以按照我的回答中所述将target="_blank" 添加到&lt;h:form&gt;
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 2010-11-17
    • 1970-01-01
    • 2011-09-30
    • 2018-08-17
    • 1970-01-01
    • 2011-01-20
    • 2012-09-08
    相关资源
    最近更新 更多