2013-04-23 5 views
0

Ми ActionListener в CommandButton не вызывается после того, как я выбираю элемент в ах: selectOneMenu, только работает, когда я нажимаю кнопку witout любого выбора в selectOneMenu Ниже вы можете увидеть мой код:CommandButon «s ActionListener не работает

<h:form id="formBtnBusquedaAnomalias"> 
       <table> 
        <tr> 

         <td> 
           <h:outputLabel id="idEstatusAnomalias" value="Estatus anomalias." />          
           <h:selectOneMenu id="selectOneMenuEstatusAnomalias" 
            value = "#{busquedaAnomaliasManageBean.selectedEstatusAnomaliaVO}" > 
            <f:converter converterId="estatusAnomaliaConverter"/> 
            <f:selectItem itemLabel="Select one" /> 
            <f:selectItems value="#{busquedaAnomaliasManageBean.lstEstatusAnomaliaVOs}" var="estatusAnomalia" 
             itemLabel="#{estatusAnomalia.descripcionEstatusAnomalia}" /> 
           </h:selectOneMenu>      
         </td> 

        </tr> 
        <tr> 
         <td>  
          <p:commandButton value="Buscar anomalias." 
            actionListener="#{busquedaAnomaliasManageBean.buscarAnomalias()}" /> 
         </td> 
        </tr> 
       </table> 
      </h:form> 

конвертер класс:

@FacesConverter(value = "estatusAnomaliaConverter") 
public class EstatusAnomaliaConverter implements Converter{ 

@Override 
public Object getAsObject(FacesContext ctx, UIComponent component, String value) { 
    EstatusAnomaliaVO estatusAnomaliaVO = new EstatusAnomaliaVO(); 
    estatusAnomaliaVO.seDescripcionEstatusAnomalia(value); 
    return estatusAnomaliaVO; 
} 

@Override 
public String getAsString(FacesContext ctx, UIComponent component, Object object) { 
    String temp = ""; 
      if(!object == null) 
      { 
       temp = object.toString(); 
      } 
    return temp; 
} 

}

ManageBean:

@ManagedBean(name=ConstantesManageBeans.MANAGE_BEAN_BUSQUEDA_ANOMALIAS) 
@RequestScoped 
public class BusquedaAnomaliasManageBean implements Serializable { 

/** 
* 
*/ 
private static final long serialVersionUID = -1955257440354260445L; 


public void buscarAnomalias(){ 
      //...some code here 
} 
] 

ответ

0

Ваш метод buscarAnomalias не следует за сигнатурой метода ActionListener. Это подпись:

public void actionListener(ActionEvent event) { 
    // ... 
} 

Для того, чтобы заставить его работать, просто добавьте параметр ActionEvent к вашей методе:

public void buscarAnomalias(ActionEvent event) { 
    //...some code here 
} 

Если бы я тебя, я хотел бы использовать action вместо actionListener выполнять свои функции из управляемого операции боб:

<p:commandButton value="Buscar anomalias." 
    action="#{busquedaAnomaliasManageBean.buscarAnomalias()}" /> 

Обратите внимание, что с помощью этого подхода, вам не нужно, чтобы добавить параметр ActionEvent event к вашему методу.

Подробнее:

Другая проблема в вашем коде, что ваш FacesConverter не удается при извлечении значения выбранного элемента. Это потому, что вы не установили itemValue в вашем <f:selectItems>:

<h:selectOneMenu id="selectOneMenuEstatusAnomalias" 
    value="#{busquedaAnomaliasManageBean.selectedEstatusAnomaliaVO}"> 
    <f:converter converterId="estatusAnomaliaConverter"/> 
    <f:selectItem itemLabel="Select one" /> 
    <f:selectItems value="#{busquedaAnomaliasManageBean.lstEstatusAnomaliaVOs}" 
     var="estatusAnomalia" itemValue="#{estatusAnomalia}" 
     itemLabel="#{estatusAnomalia.descripcionEstatusAnomalia}" /> 
</h:selectOneMenu> 
+0

Это ограничение больше не сохраняется: https://javaserverfaces.java.net/nonav/docs/2.0/pdldocs/facelets/h/commandButton.html , Возможно, также зависит от версии OP JSF, хотя – kolossus

+0

@kolossus - ваша ссылка сломана? Я пытаюсь получить доступ, но он показывает только пустую страницу и продолжает загружаться. –

+0

Не могу в это поверить, но кажется, что связь скончалась в одночасье. Попробуйте это https://javaserverfaces.java.net/nonav/docs/2.0/vdldocs/facelets/h/commandButton.html – kolossus