请教各位一个问题,我想做这样的动作,在页面1中创建一个<h:commandLink>单击之后,触发一个托管bean: BeanA的动作方法Action1,在Action1中创建一个新的托管bean:BeanB,然后让这个BeanB的属性现在在Action1导航到的页面2中,请问这个动作如何完成,多谢指点

解决方案 »

  1.   

    我想没有必要在Action中再次创建BeanB。
    你应该利用BeanA转向相关的Action后,返回不同的对象,然后再由Action直接导向其他页面。不知道为什么要创建BeanB?
      

  2.   

    是这样子的,页面A输入参数,然后根据页面a的参数查询数据库,得到一个信息列表放到了一个Vector里面,我想在BeanA的Action1中生成这个Vector然后在下一个页面显示出来,faces-config.xml中有这样的定义
    <managed-bean>
    <managed-bean-name>linkVector</managed-bean-name>
    <managed-bean-class>java.util.Vector</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    我是想在Action中根据参数生成这个linkVector,然后导航到页面2,再用datetable把它显示出来,Action1部分代码如下:
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Vector vectInfo = (Vector)facesContext.getApplication().evaluateExpressionGet
    (facesContext, "#{linkVector}", Vector.class);
    vectInfo.add("aaaa");
    vectInfo.add("bbbb");
    return "Success";页面2:<rich:dataTable value="#{linkVector}" var="linkItem">
    <rich:column>
    <f:facet name="header">
    <h:outputText value="column1"></h:outputText>
    </f:facet>
    <h:outputText value="#{linkItem}"></h:outputText>
    <f:facet name="">
    <h:outputText value="column2"></h:outputText>
    </f:facet>
    </rich:column>
    </rich:dataTable>
    返回的结果为空
      

  3.   

    <managed-bean-scope>request </managed-bean-scope> 
    把這裡改成session試一下。
      

  4.   

    如果不改成session呢,我的意思是想用类似于response一个结果似的,把返回的结果显示在下一页,而不让它在session上保留
      

  5.   

    似乎不行把,JSF頁面中用response來寫資料的話,好像會報什麽“流已關閉”的錯誤,JSF中應該要使用session級的bean才可以實現,如果不想占用內存的話,可以參考:JSF页面跳转时清除Sessionhttp://blog.csdn.net/sunshinestation/archive/2008/07/16/2658825.aspx
      

  6.   

    可以先在session范围内做一个Map<String name,Object value>。
    然后,把要留到下个页面的对象都压进 Map。
    最后做一个 /* 的过滤,从Map里面把所有的对象都取出来,再用相同的name,和value压进 request范围。最后再把这个Map清空,就可以了。