前提是不能使用<managed-bean-scope>session</managed-bean-scope>点击父画面的button然后popup出子画面,子画面中检索的数据放到控件selectManyListbox中,然后点按钮关闭子画面,返回父画面,将子画面中检索到的数据(也就是selectManyListbox里的值)传回父画面,并显示在父画面的selectManyListbox控件里!试过用js传递,但是画面显示功能可以实现,可是父画面再提交时backbeen无法得到控件的值!

解决方案 »

  1.   

    这个可以用JS实现,传统方法或者刷新下父界面,把值加进去
    无刷新状态下 你不能指望JSF能做到自动存储值
      

  2.   

    父画面是自动刷新的,问题是,两个画面如果都是inputText,后台的bean是可以得到值的,但是selectManyListbox绑定的是数组,在父画面赋值的时候子画面调用了父画面的js方法如下:
    function subgobacklist(subselectItem){ 
      var selectItem = document.getElementById("form1" + ":manyListbox");
      while(selectItem.options.length!=0){
            selectItem.remove(0);
       }
      for(var i=0;i<subselectItem.options.length;i++){
       selectItem.add(new Option(subselectItem.options[i].text,subselectItem.options[i].value));
      }   
     } 这样以后,画面的值可以显示出来,但是selectManyListbox绑定的list并没有得到值,这是为什么?
     
      

  3.   

    你把子画面的值提交上去,然后父画面重新加载一次不就ok了么,也就是说,你的js要完成提交并刷新的功能,先赋值,再提交,你的代码只是客户端数据更新,服务端根本没有更新,也就是说你没有提交,当然服务端得不到值了。
      

  4.   

    还有一个问题就是看看你的backing bean,你的backing bean在初始化值的时候是不是会冲掉你提交的数据
      

  5.   

    以iframe的方式嵌入时,在嵌入的jsp页面中加入如下代码:
    StringBuffer sb = new StringBuffer();
    sb.append("<body onload=\"javascript:window.parent.location.href='");
    sb.append(strBackURL);
    //根据BackURL中原有参数情况增加新的参数
    if (strBackURL.indexOf('?') == -1)
    {
    sb.append('?');
    }
    else
    {
    sb.append('&');
    }
    sb.append("a=").append(a).append("'\"></body>");
    strBackURL为转向页面,a为传入参数iframe使用方式google可得
      

  6.   

    设定加载方式,使之用到便加载。或者利用spring管理bean使之产生同一个object,父页面调用已经改变的object(前提还是要刷新父页面)