2010-01-29 61 views
1

我想弹出一个窗口,当有人点击数据表上的按钮。问题与JSF 1.1和PopUp

        <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的生命周期不同步,因此弹出窗口首先显示空白,当我刷新时,它会提取正确的数据。

是否有无论如何我可以点击一个按钮,它将在托管然后打开一个弹出窗口,使处理后的数据fr失效om托管bean。

我正在使用JSF 1.1。

回答

3

你在这里基本上发射 独立请求:一个与表单关联提交等将打开在弹出的RDDetails.jsf。您需要结合一个请求。您可以在两种基本的方式实现这一目标:

  1. 摆脱onclick的,只是添加target="_blank"<h:form>,使其得到提交到一个新的窗口/标签。

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

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

+0

我试图创建从后台bean像这样的URL - 的onclick = “#{} cacheController.url” 和该网址将具有JSp样式参数?param = value&param2 = value2等等。您认为这会起作用吗? – Shamik 2010-01-29 23:04:11

+0

不,您需要通过'window.open()'以相同的方式传递网址。 – BalusC 2010-01-29 23:12:47

+0

是我做这种方式 - 在这里是在支持Bean我的getURL方法 - \t公共字符串的getURL(){ \t \t selectedRD =(RuleDisplayTO)dataTable.getRowData(); \t \t回报 “window.open('/ e2fo /工具/ cachetool/test.jsp的?NAME =” \t \t \t \t + selectedRD。getName() \t \t \t \t +“','popupWindow','dependent = yes,menubar = no,toolbar = no,height = 500,width = 400'); return false;”; \t} – Shamik 2010-01-29 23:36:54

0

见我的例子:

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

我使用JSF 1.1

+1

你也可以在我的答案中简单地添加'target =“_ blank”'到''。 – BalusC 2010-11-11 21:05:26