1

由于 bean 在请求范围内,重定向创建一个新实例。如果我尝试将 bean 放在 View Scope 中,那么我会得到错误属性名称被引用到比目标视图更窄的对象。

我正在显示一棵树,当用户单击树节点(例如第二个节点)时,与该节点对应的值将显示在下一页上。

@ManagedBean
@RequestScoped
public class ThreeSixtyDegreeBean implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @ManagedProperty(value="#{param.name1}")
    private String name;
    private String type;
    private String typeName;

    private List<AttributeDetails> attributeList;
    private List<Entity> entityList;
    private boolean rendered;
    private TreeNode root;
    private TreeNode selectedNode;

public void onNodeSelect() {

*selecting Data of the Node selected* 

                String a=fetchData();

                try {
            FacesContext.getCurrentInstance().getExternalContext()
                    .redirect(a);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

axhtml页面的名称在哪里。

4

2 回答 2

1

您可以将您的内容存储在新的 JSF 2 Flash Scope 中,以在请求之间存储属性。你onNodeSelect()现在看起来像这样:

 public void onNodeSelect() {

      *selecting Data of the Node selected* 
     FacesContext context = FacesContext.getCurrentInstance();
     Flash flash = context.getCurrentInstance().getExternalContext().getFlash(); //prepare jsf flash scope, to store user data pojo for the next view
     flash.putNow("myData", fetchData());
     try {
        FacesContext.getCurrentInstance().getExternalContext()
                .redirect(a);
       } catch (IOException e) {
           e.printStackTrace();
    }
}
}

#{flash}然后,在目标页面上,您可以使用EL 表达式检索存储在闪存范围中的数据。它本质上是一个Map,所以您只需使用您存储的值的键(我上面使用的示例中的“myData”)。要访问它,请使用

     #{flash.myData.someMemberVariable}
于 2012-11-10T00:37:04.817 回答
0

视图范围也不起作用。只要您回发到相同的视图,它就会一直存在。重定向基本上会创建一个全新的 GET 请求,并且还会重新创建视图范围。

在这种特殊情况下,最好在重定向请求中执行数据初始化,而不是在回发请求中。您可以通过创建一个普通的 GET 链接来做到这一点,您可以在其中将必要的信息作为请求参数传递。像这样的东西:

<h:link value="#{node.name}" outcome="#{node.viewId}">
    <f:param name="someId" value="#{node.someId}" />
    <f:param name="name1" value="#{param.name1}" />
</h:link>

然后在与重定向页面关联的请求范围 bean 中,您可以使用@ManagedProperty甚至<f:viewParam>将请求参数设置为模型值。

也可以看看:

于 2012-11-09T11:14:05.797 回答