actionListener不适用于jsf和primefaces

时间:2014-01-03 22:02:18

标签: jsf jsf-2 primefaces actionlistener

我有一个带有primefaces的.xhtml文件,当尝试触发actionListener不起作用时,有一个带有一个commandButton的表单这是表单:

<h:form id="formCreate">
                <p:dialog header="Crear" widgetVar="usuarioDlgCreate" resizable="false" id="usuDlgCreate"  
                          showEffect="fade" hideEffect="explode" modal="true">  

                    <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">  

                        <h:outputText value="Rol:" />  
                        <p:inputText value="#{usuarioBean.usuarioSeleccionado.rolId}"/>  

                        <h:outputText value="Nombre:" />  
                        <p:inputText value="#{usuarioBean.usuarioSeleccionado.nomUsuario}"/>  


                        <h:outputText value="Email:" />  
                        <p:inputText value="#{usuarioBean.usuarioSeleccionado.email}" size="30"/>  

                        <f:facet name="footer">
                            <p:separator/>
                            <p:commandButton id="btnNewAccept" actionListener="#{usuarioBean.create(actionEvent)}" title="Guardar" value="Guardar"/>  
                            <p:commandButton id="btnNewCancel" oncomplete="usuarioDlgCreate.hide()" icon="ui-icon-new" title="Cancelar" value="Cancelar"/>  
                        </f:facet>
                    </h:panelGrid>  

                </p:dialog>  

            </h:form>

这是我的bean方法:

public void create(ActionEvent actionEvent) {
   UsuarioDao usuarioDao = new UsuarioDaoImplements();
   String msg = null;
   if(usuarioDao.create(this.usuarioSeleccionado)) {
       msg = "Información guardada correctamente";
   } else {
       msg = "No ha sido posible almacenar la información";
   }

    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, null);
    FacesContext.getCurrentInstance().addMessage(null, message);
}

已尝试使用按钮,例如:   

和没有参数ActionEvent的方法:

也喜欢这样(没有括号):  

但是没有解雇这个方法,请求帮助我....非常感谢

4 个答案:

答案 0 :(得分:1)

我有类似的问题,当我在组件中用作值表达式对象时,actionListener没有触发。提交不成功,没有显示错误消息(也没有记录)。所以我将值表达式更改为简单变量:整数,字符串等,之后为我工作。

之前:

<p:selectOneMenu value="#{formCalendarDay.airplane}">
  <f:selectItems value="#{classifiers.airplanes}" var="airplane" itemLabel="#{airplane.name}" itemValue="#{airplane}"/>  
</p:selectOneMenu> 
修复后

<p:selectOneMenu value="#{formCalendarDay.airplaneId}">
  <f:selectItems value="#{classifiers.airplanes}" var="airplane" itemLabel="#{airplane.name}" itemValue="#{airplane.id}"/>  
</p:selectOneMenu> 

答案 1 :(得分:0)

首先,您应该更改您的属性:actionListener="#{usuarioBean.create}"

其次,请确保您使用的是javax.faces.event.ActionEvent

如果仍然无效,则应验证验证错误,您可以尝试添加h:messages以查看是否出现问题。

答案 2 :(得分:0)

尝试将表单放在对话框中 - 而不是相反

答案 3 :(得分:0)

好吧,我解决了这个问题,看起来Primefaces 3.5和Glassfish 4.0并没有很好地工作,所以我改变了Primefaces 4.0并且它有效。