如何从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。我怎么能这样做?
提前谢谢!
答案 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}" />