JSF 1.1和PopUp的问题

时间:2010-01-29 22:09:43

标签: jsf

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

                                    <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。

2 个答案:

答案 0 :(得分:3)

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

  1. 摆脱onclick,只需将target="_blank"添加到<h:form>,以便将其提交到新窗口/标签页。

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

  3. 第一种方式显然是最简单的,但这并没有给你一个“值得信赖的”弹出/模态对话框。第二种方式有点难度(除非你已经很好地掌握了JavaScript和JSF)。然后我会考虑寻找一个提供即用型弹出组件的组件库。

答案 1 :(得分:0)

参见我的例子:

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

我正在使用jsf 1.1