2009-11-30 47 views

Respuesta

13

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> 
4
<h:selectOneMenu onchange="document.getElementById('myform').submit();" ...> 
Cuestiones relacionadas