Jsf2查看参数和viewscoped bean

时间:2011-06-19 08:37:50

标签: java jsf jsf-2


如何从viewscoped bean访问视图参数?
我的页面几乎与此内容相同:

<f:metadata>
    <f:viewParam name="name" value="#{goToUserpageRequest.name}" />
</f:metadata>

<ui:define name="content">
    <h:outputText value="#{user.name}" styleClass="text"></h:outputText>
    <h:outputText value="#{user.description}" styleClass="text"></h:outputText>
</ui:define>

GoToUserpageRequest是我用来重定向到此页面的bean,因此我可以发送name的值。
用户是我的viewscoped bean。我想将viewParam名称的值传递给user.name。我怎么能这样做?
提前谢谢!

2 个答案:

答案 0 :(得分:2)

对于您的情况,有一种更简单的方法,我在寻找相同情况的解决方案时已经想到了。  只需在你的xhtml中使用它:

<f:metadata>
    <f:viewParam name="name" value="#{goToUserpageRequest.name}" />
</f:metadata>

 <f:event type="preRenderView" listener="#{MY_BEAN.setName(goToUserpageRequest.name)}"/>

所以你可以将goToUserpageRequest.name值发送回重定向视图的bean(我称之为MY_BEAN)

答案 1 :(得分:1)

您可以使用external context中的context获取此信息。请参阅request parameters

但是,我会尝试使用request范围bean和inject视图和参数范围值。然后,您可以从那里操纵视图范围对象。这种方法更容易进行单元测试。


编辑:

以下是一个示例实现:

@ManagedBean @RequestScoped
public class NameUpdater {
    @ManagedProperty("#{param.name}") private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    @ManagedProperty("#{user}") private User user;
    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }

    @PostConstruct public void init() {
        if(name != null) user.setName(name);
    }
}

为了创建请求范围的bean,绑定表达式将更改为:

<h:outputText value="#{nameUpdater.user.name}" />