打印

[已解决] 如何使弹出窗口时都执行一段程序

如何使弹出窗口时都执行一段程序

弹出一个窗口的用window.showModalDialog(a.faces)
a.faces scope是session
然后关闭a.faces窗口,
第二次 第三次再打开a.faces时,如何执行一段代码,
发现代码放在
@BeforeRender
   public void beforeRender(boolean isPostBack) {
      if (!isPostBack) {
中都不运行,
如果想每次打开a.faces时,都运行一段代码,如何解决呢

[ 本帖最后由 peter 于 2010-3-12 22:19 编辑 ]

TOP

如果你仅仅是在客户端用js来showModalDialog的话是不会启动jsf的生命周期的.
可以在一个w:button后台所绑定的Action中写你要在每次都执行的代码哈.
再在这个Action最后调用一下:Browser.execClientScript("window.showModalDialog('a.faces')");

TOP

楼上说得对,客户端js弹出窗口为会提交请求,也就执行不到服务器端代码。要执行服务器端代码必须有get或post请求。

把a.faces的scope改为request应该可以吧。

TOP

我的意思是,在a.faces中的
@BeforeRender
 public void beforeRender(boolean isPostBack) {
  if (!isPostBack) {
不会执行
第一次打开a.faces可以执行@BeforeRender,第二次打开时就不会执行了,改request也不行

TOP

如果litebean是request的,beforerender是会执行的。
我理解你的意思是页面某个组件的click事件会弹出一个模态窗口,这个窗口的src是a.faces
我做了这样的测试,结果没问题。
a.html:
<h1 onclick="window.showModalDialog('before.faces') ">Welcome!</h1>
before.faces对应Bean
   @BeforeRender
   public void init(boolean bol) {
      System.out.println(new Date() + " run here");
   }

结果是每次点击都会打印

TOP

说明第一次弹出窗口时发的是get请求,第二次第三次发的是post请求。
if (!isPostBack) {
...
}
意思是说如果是get请求则执行里面的代码

TOP