No puede dar un tiro de Javascript para esto. Básicamente, debe permitir que el Javascript envíe la solicitud al lado del servidor. En un elemento HTML <select>
(que ha sido generado por JSF h:selectOneMenu
), puede usar mejor el atributo onchange
para esto. Cualquier JS que adjunte a este evento se invocará cada vez que el usuario cambie el valor del elemento.
<h:selectOneMenu onchange="this.form.submit();">
o si usted es perezoso por escrito, sus abreviaturas también es correcto:
<h:selectOneMenu onchange="submit()">
Esto le envíe el formulario en combinación con el elemento HTML firstnext input type="submit"
el interior de la misma forma (que se ha estado generado por el JSF h:commandButton
).
<h:form>
<h:selectOneMenu value="#{bean.page}" onchange="submit()" required="true">
<f:selectItem itemLabel="Select page.." />
<f:selectItems value="#{bean.pages}" />
</h:selectOneMenu>
<h:commandButton value="submit" action="#{bean.submit}" />
<h:commandButton value="other" action="#{bean.other}" /> <!-- won't be submitted -->
</h:form>
tiene que escribir la lógica en el método de acción que hace que la acción de navegación como definied en faces-config.xml
para ser llevado a cabo. Ejemplo:
public String submit() {
return this.page;
}
si lo hace no desea utilizar un commandButton
, entonces también se puede seguir adelante con abusar de la valueChangeListener
:
<h:form>
<h:selectOneMenu value="#{bean.page}" onchange="submit()"
valueChangeListener="#{bean.change}" required="true">
<f:selectItem itemLabel="Select page.." />
<f:selectItems value="#{bean.pages}" />
</h:selectOneMenu>
</h:form>
en el grano y luego tienes:
public void change(ValueChangeEvent event) {
String page = (String) event.getNewValue(); // Must however be the exact page URL. E.g. "contact.jsf".
FacesContext.getCurrentInstance().getExternalContext().redirect(page);
}
Alternativamente, si ya tiene los URL deseados como valores f:selectItem
, entonces también puede continuar con el ingenio h solo JS y sin acciones de frijol:
<h:selectOneMenu value="#{bean.page}"
onchange="window.location = this.options[this.selectedIndex].value">
<f:selectItem itemLabel="Select page.." />
<f:selectItem itemLabel="home" itemValue="home.jsf" />
<f:selectItem itemLabel="faq" itemValue="faq.jsf" />
<f:selectItem itemLabel="contact" itemValue="contact.jsf" />
</h:selectOneMenu>