大家好,我现在接了一个给老系统换框架的工作。客户要求使用的是JSF+SPRING框架,可我发现这个jsf我一点也不熟悉而且也不好用。题外话了,下面说下我的问题。
  现在是要打开一个新窗口,但是又要传值过去。通过传过去的参数到数据库里去取值,再将取到的值展现在新打开的窗口里。在老的框架里,他们是这样写的:var code = window.document.frmInquiry.code.value;
lfnNewWindowMedium('project?Action=FindCode&hdnUserId='+document.frmTermsInquiry.hdnUserId.value+'&Code='+code,'PopUP');lfnNewWindowMedium 就是一个打开新窗口的window.open 的function,  他们是打开一个action,并且把参数传进action中进行操作,在action里返回一个页面,最后就是打开那个页面并将结果展示出来。
   可是我在jsf里应该怎么做呢???   我也想像他们那样传一个action进去,但是jsf里没有action。我该怎么样做才能先去后台java里操作数据,然后再打开新页面呢????
   不知道我有没有把意思表达清楚。谢谢大家了!!!  

解决方案 »

  1.   

    你应该先好好了解下jsf的工作原理不好意思。。不用jsf好多年
      

  2.   

    解决了,  可以用richface与ajax 的a4j:commandbutton,其中有一个oncomplete属性,意思是先执行action,然后再执行oncomplete中的js代码。 比如
    <a4j:commandButton title="Select Ship To Location" action="#{content.loadShipLocation}" image="/images/lookup.gif" oncomplete="javascript:lfnNewWindowMedium('/apss/pages/request/findshiptolocation.faces','ShipToLocationLookUp')"/>
    就是先执行action中的loadShipLocation方法,执行完成后再执行javascript去打开一个新窗口
      

  3.   

    那执行这个动作:action="#{content.loadShipLocation}" 返回的值可以到新窗口中获取吗?
      

  4.   

    什么是action返回的值? 该action应该是void型的,因为新窗口的地址已经在js里指定了。如果你是指action中的一些变量的值的话,那就很平常的在新窗口中用jsf标签取值就可以了。比如
    public void loadShipLocation(){    txtAddress = pymtServ.getAddress();
    }在新窗口的jsp中就用 #{pymtBean.txtAddress}取值就行了。
      

  5.   

    按我们的做法
    是在新开窗口的url中使用参数 也就是url?x=1 这样的方式传参数的
    然后 在mbean 也就是后台bean 初始化的时候 用request.getParameter("x")方法获取url中的参数x的值,然后用这个值获取数据库中的数据,这些都是在后台bean的构造函数里面操作的
    当然也可以设置一个后台bean的property来保存这个值,再 在 get方法中用这个值进行数据库操作。 
      

  6.   

    可以用richface与ajax 的a4j:commandbutton,其中有一个oncomplete属性,意思是先执行action,然后再执行oncomplete中的js代码。 比如
    <a4j:commandButton title="Select Ship To Location" action="#{content.loadShipLocation}" image="/images/lookup.gif" oncomplete="javascript:lfnNewWindowMedium('/apss/pages/request/findshiptolocation.faces','ShipToLocationLookUp')"/>
    就是先执行action中的loadShipLocation方法,执行完成后再执行javascript去打开一个新窗口新窗口中的mbean要和获取数据的mbean是一个实例才可以吧,不然数据无法显示在新窗口的。
    不过可以用session来保存以后取出