Tuve un comportamiento extraño en mi aplicación. Los botones de comando comienzan a invocar acciones en el segundo golpe. Primero, nada sucede. Tiene efecto sobre firefox y cromo, pero en epifanía funciona como de costumbre.Los botones de comando invocan acciones en la segunda inserción (jsf)
Mi entorno: - Ubuntu 11.04 - GlassFish 3.1.1 - 2.X JSF - PrimeFaces 3.2 - Firefox 12.0 - epifanía ejemplo 2.30.6
Código:
<ui:define name="content">
<h:form id="form">
<h:panelGrid id="panelGrid" columns="3">
<h:outputText value="#{msg.fieUserName}:"/>
<h:inputText id="name" value="#{userBb.editedUser.username}" />
<h:message for="name" styleClass="error_msg"/>
<h:outputText value="#{msg.fieUserDescription}:"/>
<h:inputText id="description" value="#{userBb.editedUser.description}" />
<h:message for="description" styleClass="error_msg"/>
<h:outputText value="#{msg.fieUserPassword}:"/>
<h:inputSecret id="password" value="#{userBb.editedUser.password}" redisplay="true"/>
<h:message for="password" styleClass="error_msg"/>
<h:outputText value="#{msg.fieUserRights}:"/>
<p:selectOneMenu id= "rights"
value= "#{userBb.editedUserGroup}"
converter="#{pGroupOfUsersConverter}">
<f:selectItems
value ="#{groupDao.findAll()}"
var ="row"
itemLabel="#{groupDao.rightsDescription(row.id)}"
itemValue="#{row.groupname}"
>
</f:selectItems>
</p:selectOneMenu>
<h:message for="rights" styleClass="error_msg"/>
<h:outputText value="#{msg.fiePorofolioName}:" rendered="#{userBb.chosenNew}"/>
<h:inputText id="portName" value="#{userBb.portfelForNewUser.nazwa}" rendered="#{userBb.chosenNew}">
<f:validateBean disabled="true" />
</h:inputText>
<h:message for="portName" styleClass="error_msg" rendered="#{userBb.chosenNew}"/>
<h:outputText value="#{msg.fiePotofolioCurrency}:" rendered="#{userBb.chosenNew}"/>
<p:selectOneMenu id= "waldep"
value= "#{userBb.portfelForNewUser.walutaDepozytowa}"
converter="#{igConverter}"
rendered= "#{userBb.chosenNew}"
>
<f:selectItems value= "#{igDao.waluty}"
var= "row"
itemLabel="#{row.nazwa}"/>
</p:selectOneMenu>
<h:message for="waldep" styleClass="error_msg" rendered="#{userBb.chosenNew}"/>
</h:panelGrid>
<h:panelGrid columns="2">
<h:commandButton value="#{msg.butCreate}" action="#{userBb.formCreate()}" rendered="#{userBb.chosenNew}" />
<h:commandButton value="#{msg.butSave}" action="#{userBb.formEdit()}" rendered="#{!userBb.chosenNew}"/>
<h:commandButton value="#{msg.butBack}" action="#{userBb.formBack()}"/>
</h:panelGrid>
</h:form>
</ui:define>
En este ejemplo, el método userBb.formCreate() se invoca solo al hacer clic en el botón de comando aunque el botón esté visible. Cuando los campos no se llenan correctamente, aparecen los mensajes apropiados junto a ellos, pero ... ¡solo con un segundo clic! ¿Algún consejo?
Echa un vistazo a los puntos desde: this advice, pero solución no encontrada.
¿Estás 100% seguro de que no es los puntos 5.. y 7 de esa respuesta? No lo ha desmentido explícitamente en su código. – BalusC
Lo he comprobado. Primero, aseguré que el atributo renderizado está bien, y lo configuré adicionalmente en @PostConstruct init(). Segundo cambié el id. de form a userForm y agregado al botón de comando h: commandButton> Todavía funciona para la segunda acción en firefox y cromo y para el primero en ephipany. Trataré de averiguarlo, probablemente hice algo mal –
Zbyszek