代码之家  ›  专栏  ›  技术社区  ›  Shamik

JSF 1.1和弹出窗口有问题

jsf
  •  1
  • Shamik  · 技术社区  · 15 年前

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

                                        <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缓存控制器。但问题是,弹出窗口和JSF生命周期不同步。结果,弹出窗口首先显示为空白,当我刷新时,它会提取正确的数据。

    不管怎样,我可以单击一个按钮,在托管bean中进行一些处理,然后打开一个弹出窗口,从托管bean中重新获取处理过的数据。

    我使用的是JSF1.1。

    2 回复  |  直到 13 年前
        1
  •  3
  •   BalusC    15 年前

    你在这里基本上是在开火 独立的 请求:一个与表单提交关联,另一个打开 RDDetails.jsf 在弹出窗口中。你需要把这个结合起来 请求。基本上可以通过两种方式实现这一点:

    1. 摆脱 onclick 只是添加 target="_blank" <h:form> 以便将其提交到新窗口/选项卡中。

    2. 通过添加阻止默认操作 return false; 点击 并在与 JSF . 唯一(主要)的警告是模型不会用表单字段更新。因此,您需要在javascript的帮助下手动将表单字段作为弹出URL的请求参数传递。然后可以使用 faces-config.xml 将get请求参数注入模型。

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

        2
  •  0
  •   animuson    13 年前

    请看我的例子:

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

    我使用的是JSF1.1