JSF/PrimeFaces selectOneMenu изменить параметр URL и перенаправить

Я использую JSF2 и PrimeFaces. Как я могу написать selectOneMenu, который будет вызывать JSF-навигацию, чтобы перенаправить пользователя на ту же страницу, но с разными параметрами, когда он изменит параметр в меню? Мне нужно только изменить цвет.

Из URL:

    <f:metadata>
        <f:viewParam name="vehicle" value="#{myViewController.vehicle}"/>
        <f:viewParam name="vehicle" value="#{myViewController.color}"/>
    </f:metadata>

MyView.xhtml: (без работы)

    <h:form id="selectOneMenuEdition">
    <p:selectOneMenu id="selectOneMenuHeader"
                     value="#{selectOneMenuHeader.outcome}" >
        <f:selectItem itemValue="viewVehicles.xhtml?vehicle=#{myViewController.vehicle}&amp;color=red" itemLabel="Vehicle red " />
        <f:selectItem itemValue="viewVehicles.xhtml?vehicle=#{myViewController.vehicle}&amp;color=blue" itemLabel="Vehicle blue" />
        <p:ajax event="change" listener="#{selectOneMenuHeader.navigate}" />
    </p:selectOneMenu>
    </h:form>

ManagedBean:

private String outcome;

public void navigate() throws IOException {
    FacesContext.getCurrentInstance().getExternalContext().redirect(outcome);
}

1 ответ

Ваш <p:selectOneMenu> связан с selectOneMenuHeader.outcomeтак что вам просто нужно получить его значение в вашем бобе.

Затем вы можете создать свой собственный URL, чтобы перенаправить пользователя с желаемыми параметрами.

Пример (бин):

public void navigate() throws IOException {
    String url = "yourPage.jsf?color=" + outcome;
    FacesContext.getCurrentInstance().getExternalContext().redirect(url);
}

Второе решение - добавить событие onchange javascript для перенаправления пользователя, выбрав текущий выбранный параметр.

Пример (ванильный JS):

onchange="document.location.href='yourPage' + this.options[this.selectedIndex].value;"
Другие вопросы по тегам