2

我正在尝试使用 JSF 和 Primefaces 在 View1 到 View2 之间重定向时传递一个对象。

我正在使用 JSF Flash 范围来执行此操作,该对象确实传递​​到第二个视图,但我仍然收到此警告:

com.sun.faces.context.flash.ELFlash setCookie

警告:JSF1095:在我们尝试为 flash 设置传出 cookie 时,响应已经提交。存储到闪存中的任何值在下一次请求时都将不可用。

即使经过几次重定向,flash cookie 也不会被删除。

View1.xhtml

<ui:composition xmlns=...... template="../../../BaseTemplate.xhtml">
    <ui:define name="templateContent">
        <mm:MyComponent />
    </ui:define>
</ui:composition>

我的组件.xhtml

<html xmlns= ......>

<composite:interface componentType="usersListComponent">
</composite:interface>

<composite:implementation>

<h:form>
    <p:commandButton action="#{cc.passObject}" value="passMyObject" />  
</h:form>

</composite:implementation>
</html>

我的组件.java

@FacesComponent("myComponent")
public class MyComponent extends UIComponentBase {
        
    private MyObject objectToPass;  
    public String passObject() {
        ExternalContext externalContext= FacesContext.getCurrentInstance().getExternalContext();
        externalContext.getFlash().put("objectToPass", objectToPass);
        return "View2";
    }
}

View2Controller.java

@ManagedBean
@ViewScoped
public class View2Controller implements Serializable {
    @PostConstruct
    public void init() {
        MyObject ob = (MyObject) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("objectToPass");
        ......Do Something with MyObject
    }
}

解决了!!!!!!

我不确定是最好的方法,但它对我有用..

问题在于 http 缓冲区大小和 jsf 生命周期,cookie 是在写入响应之后写入的,并且缓冲区太小而无法同时包含它们。

4

1 回答 1

1

我不确定是最好的方法,但它对我有用..

问题在于 http 缓冲区大小和 jsf 生命周期,cookie 是在写入响应之后写入的,并且缓冲区太小而无法同时包含它们。

于 2016-05-17T13:41:53.167 回答