我有一个非常简单的页面,它只是提示用户输入一个名称,然后创建一个具有该名称的资源。当用户点击提交按钮时,我想直接导航到刚刚创建的实体的页面。所以我的页面看起来像这样:
<h:form id="form">
<p:fieldset legend="Create new">
<p:panelGrid columns="2">
<h:outputText value="Name" />
<p:inputText value="#{createBean.entity.name}" />
</p:panelGrid>
<p:commandButton value="Create Entity" ajax="false"
action="#{createBean.submit}">
</p:commandButton>
</p:fieldset>
</h:form>
submit
的{{1}}操作现在应该保留实体。作为副作用,这为实体分配ID。现在我想导航到这个实体。
createBean
public void submit() {
/* Persist entity, entity.getId() will now
return a meaningful value. */
FacesContext context = FacesContext.getCurrentInstance();
NavigationHandler handler = FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
// How could I pass the ID?
handler.handleNavigation(context, null, "pretty:entity-detail");
}
的映射如下所示:
entity-detail
记录:使用Apache MyFaces 2.1.5和PrettyFaces 3.3.2。
答案 0 :(得分:3)
您在映射中使用命名路径参数。在这种情况下,您只需从action方法返回viewId并附加相应的查询参数。
public String submit() {
/* Persist entity, entity.getId() will now
return a meaningful value. */
long id = ....
return "/views/entity/entityDetail.xhtml?faces-redirect=true&id=" + id;
}
对于EL注入参数,该过程略有不同。有关详细信息,请参阅文档的this chapter。