使用具有动态ID的Prettyfaces进行导航

时间:2012-02-11 08:47:00

标签: jsf-2 primefaces prettyfaces

我有一个非常简单的页面,它只是提示用户输入一个名称,然后创建一个具有该名称的资源。当用户点击提交按钮时,我想直接导航到刚刚创建的实体的页面。所以我的页面看起来像这样:

<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。

1 个答案:

答案 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