我正在使用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}&color=red" itemLabel="Vehicle red " />
<f:selectItem itemValue="viewVehicles.xhtml?vehicle=#{myViewController.vehicle}&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);
}
答案 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;"