Навигация по странице JSF с использованием перезаписи (необходимо изменить URL-адрес браузера для навигации)

У меня есть класс 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}"))

        ;
    }
}

Мой управляемый компонент

@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, в URL-адресе браузера отображается /page1/xyz, хотя страница перенаправляется на page2

Требуется изменить URL-адрес на /page2/xyz.

Я добавил <redirect/> в faces-config.xml , но в URL-адресе отображается полный путь к page2 (/view/page2.jsf) .

Как я могу перенаправить на следующую страницу с изменением URL-адреса?


person Sujith PS    schedule 06.05.2015    source источник


Ответы (1)


Ваш джойн выглядит странно. Вы не должны использовать параметры запроса в части to(). Rewrite автоматически преобразует все параметры пути в параметры запроса.

Итак, вместо:

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

Тебе стоит попробовать:

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

Теперь ваша навигация должна работать. Но, пожалуйста, включите элемент перенаправления. Это необходимо для изменения URL-адреса.

person chkal    schedule 07.05.2015