JSF / PrimeFaces selectOneMenu更改url参数并重定向

时间:2014-11-06 11:40:33

标签: jsf jsf-2 primefaces navigation selectonemenu

我正在使用JSF2和PrimeFaces。如何编写selectOneMenu,它会调用JSF导航将用户重定向到同一页面,但是当他更改菜单中的选项时会有不同的参数? 我只需要改变颜色。

来自网址:

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

答案 0 :(得分:2)

您的<p:selectOneMenu>绑定到selectOneMenuHeader.outcome,因此您只需要在您的bean中获取其值。

然后,您可以创建自己的URL,以使用所需参数重定向用户。

示例(bean):

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

第二个解决方案是添加一个javascript onchange事件,通过选择当前选项来重定向用户。

示例(vanilla JS):

onchange="document.location.href='yourPage' + this.options[this.selectedIndex].value;"