使用重写的JSF页面导航(需要更改浏览器URL以进行导航)

时间:2015-05-06 13:17:15

标签: jsf redirect navigation jsf-2.2 prettyfaces

我有我的RewriteConfiguration类

@RewriteConfiguration
public class ApplicationConfigurationProvider extends HttpConfigurationProvider {

    @Override
    public int priority() {
        return 0;
    }

    @Override
    /**
     * map URL with resource
     */
    public Configuration getConfiguration(ServletContext context) {
        return ConfigurationBuilder.begin()

    .addRule(Join.path("/page1/{param}").to("/view/page1.jsf?product={param}"))
                .addRule(Join.path("/page2/{param}").to("/view/page2.jsf?product={param}"))

        ;
    }
}

我的managedBean

@Named("myBean")
@javax.enterprise.context.RequestScoped
public class PageManagedBean {
 ...
    public String success(){
        return "success";
    }

...
}

在我的page1.xhtml中,我的提交按钮代码是

<h:commandButton action="#{myBean.success()}" id="nextButton" value="NEXT" >
    <f:param name="product" value="#{param.product}"></f:param>
</h:commandButton>

我在faces-config.xml中的导航规则是

<navigation-rule>
        <from-view-id>/view/page1.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/view/page2.jsf</to-view-id>
        </navigation-case>
        <navigation-case>
            <from-outcome>error</from-outcome>
            <to-view-id>/error-500</to-view-id>
        </navigation-case>
    </navigation-rule>

问题是: 当我点击page1上的提交按钮后,在浏览器网址中,即使页面被重定向到/page1/xyz

,它也会显示page2

要求是将网址更改为/page2/xyz

我在<redirect/>中添加了faces-config.xml,但在网址中显示了page2/view/page2.jsf)的完整路径。

如何通过更改网址重定向到下一页?

1 个答案:

答案 0 :(得分:1)

你的加入看起来很奇怪。您不应在to()部分中使用查询参数。重写会自动将所有路径参数转换为查询参数。

所以而不是:

.addRule(Join.path("/page1/{param}").to("/view/page1.jsf?product={param}"))

你应该尝试:

.addRule(Join.path("/page1/{product}").to("/view/page1.jsf"))

现在您的导航应该有效。但请包含重定向元素。这需要更改URL。