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}&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);
}
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;"