[PRIMEFACES] p:commandButton soh é invocado no segundo clique...pq?

Dale galera, estou com um problema bizarro aqui que nao encontro a solução.

tenho um Bean gerenciavel (SessionScoped) e uma página jsf com primefaces, a qual quero que no dataTable ao clicar no botão da linha respectiva, me traga o valor da linha… simples…
Porém ao clicar no botão pela primeira vez não me trás nada, somente na segunda vez envia o valor correto.

Vou copiar o meu bean e a commandButton para vocês conseguirem visualizar melhor.

OBrigado desde já.

pagina

<h:form id="formListUser" prependId="false"> 

                <p:growl id="msgs" showDetail="true" showSummary="true"> </p:growl>
                <br />
                <p:dataTable id="userTable" var="user" value="#{userController.listUsers}" widgetVar="userList"   
                             paginator="true" rows="20"
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                             rowsPerPageTemplate="10,20,40"
                             filteredValue="#{userController.listFilteredUsers}">

                    <f:facet name="header"> 
                        User List
                        <p:outputPanel>  
                            <h:outputText value="Search all fields: " />  
                            <p:inputText id="globalFilter" onkeyup="userList.filter()" style="width:150px; margin-right: 10px;" />  
                        </p:outputPanel>  
                    </f:facet> 

                    <p:column id="listUserId" sortBy="#{user.id}" filterBy="#{user.id}" filterMatchMode="startsWith">  
                        <f:facet name="header">  
                            <h:outputText value="Id" />  
                        </f:facet>  
                        <h:outputText value="#{user.id}" />  
                    </p:column>
                    <p:column id="listUserName" sortBy="#{user.name}" filterBy="#{user.name}" filterMatchMode="startsWith">  
                        <f:facet name="header">  
                            <h:outputText value="Name" />  
                        </f:facet>  
                        <h:outputText value="#{user.name}" />  
                    </p:column>
                    <p:column id="listUserEmail" sortBy="#{user.email}" filterBy="#{user.email}" filterMatchMode="startsWith">  
                        <f:facet name="header">  
                            <h:outputText value="Email" />  
                        </f:facet>  
                        <h:outputText value="#{user.email}" />  
                    </p:column>
                    
                    <p:column style="width:120px">  

                        <p:commandButton id="editUserBtn" oncomplete="editUser.show();"
                                         icon="ui-icon-pencil" title="Edit" update=":formEditUser:displayEditUser">
                            <f:setPropertyActionListener value="#{user}" target="#{userController.selectedUser}"  />

                        </p:commandButton>

                     

                    </p:column>
                </p:dataTable>
   </h:form>

           <p:dialog header="Edit User" widgetVar="editUser" resizable="false" id="editUserDialog"> 
                <h:form id="formEditUser" prependId="false">
                    <h:panelGrid id="displayEditUser" columns="2" cellpadding="4" style="margin:0 auto;">
                        <h:outputText value="Name" />  
                        <h:outputText value="#{userController.selectedUser.name}" style="font-weight:bold"/> 
                    </h:panelGrid>
                </h:form>
            </p:dialog>

bean


Mojarra 2.1.6 (SNAPSHOT 20111206)
PrimeFaces 3.4.1
Glassfish 3.1.2

tenta colocar um ajax=false no commandButton

vc não disparou nenhum evento no botão, a primeira vez ele só vai enviar o valor a na segunda é que ele vai chama o oncomplete.

Faça assim


                        <p:commandButton id="editUserBtn" oncomplete="editUser.show();" actionListener="#{userController.setSelectedUser(user)}" 
                                         icon="ui-icon-pencil" title="Edit" update=":formEditUser:displayEditUser">    
                        </p:commandButton>  

Já tentei… aí ele não trás nem o modal, pois ele acha que eh regra de navegação de páginas… obrigado mesmo assim

[quote=ismael.costa]vc não disparou nenhum evento no botão, a primeira vez ele só vai enviar o valor a na segunda é que ele vai chama o oncomplete.

Faça assim

[code]

                    <p:commandButton id="editUserBtn" oncomplete="editUser.show();" actionListener="#{userController.setSelectedUser(user)}" 
                                     icon="ui-icon-pencil" title="Edit" update=":formEditUser:displayEditUser">    
                    </p:commandButton>  

[/code][/quote]

Continua na mesma… ele carrega vazio… depois no segundo click trás o valor… mas obrigado pela tentativa!

Já testou adicionar seu p:dialog dentro do form que esta o dataTable?

[code]
<h:form id=“formListUser” prependId=“false”>

                <p:growl id="msgs" showDetail="true" showSummary="true"> </p:growl>  
                <br />  
                <p:dataTable id="userTable" var="user" value="#{userController.listUsers}" widgetVar="userList"     
                             paginator="true" rows="20"  
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"    
                             rowsPerPageTemplate="10,20,40"  
                             filteredValue="#{userController.listFilteredUsers}">  
  
                  //seus dados...
                      
                    <p:column style="width:120px">    
  
                        <p:commandButton id="editUserBtn" oncomplete="editUser.show();"  
                                         icon="ui-icon-pencil" title="Edit" update=":formEditUser:displayEditUser">  
                            <f:setPropertyActionListener value="#{user}" target="#{userController.selectedUser}"  />  
  
                        </p:commandButton>  
  
                       
  
                    </p:column>  
                </p:dataTable>  

<p:dialog header=“Edit User” widgetVar=“editUser” resizable=“false” id=“editUserDialog”>
<h:form id=“formEditUser” prependId=“false”>
<h:panelGrid id=“displayEditUser” columns=“2” cellpadding=“4” style=“margin:0 auto;”>
<h:outputText value=“Name” />
<h:outputText value="#{userController.selectedUser.name}" style=“font-weight:bold”/>
</h:panelGrid>
</h:form>
</p:dialog>
</h:form> [/code]

[quote=aprendizweb]Já testou adicionar seu p:dialog dentro do form que esta o dataTable?

[code]
<h:form id=“formListUser” prependId=“false”>

                <p:growl id="msgs" showDetail="true" showSummary="true"> </p:growl>  
                <br />  
                <p:dataTable id="userTable" var="user" value="#{userController.listUsers}" widgetVar="userList"     
                             paginator="true" rows="20"  
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"    
                             rowsPerPageTemplate="10,20,40"  
                             filteredValue="#{userController.listFilteredUsers}">  
  
                  //seus dados...
                      
                    <p:column style="width:120px">    
  
                        <p:commandButton id="editUserBtn" oncomplete="editUser.show();"  
                                         icon="ui-icon-pencil" title="Edit" update=":formEditUser:displayEditUser">  
                            <f:setPropertyActionListener value="#{user}" target="#{userController.selectedUser}"  />  
  
                        </p:commandButton>  
  
                       
  
                    </p:column>  
                </p:dataTable>  

<p:dialog header=“Edit User” widgetVar=“editUser” resizable=“false” id=“editUserDialog”>
<h:form id=“formEditUser” prependId=“false”>
<h:panelGrid id=“displayEditUser” columns=“2” cellpadding=“4” style=“margin:0 auto;”>
<h:outputText value=“Name” />
<h:outputText value="#{userController.selectedUser.name}" style=“font-weight:bold”/>
</h:panelGrid>
</h:form>
</p:dialog>
</h:form> [/code]

           [/quote]

Sim tentei fazer um único form … mesmo comportamento… obrigado mesmo assim

Obrigado, já tinha visto esse post e checado todos os passos citados nele, mesmo assim obrigado.

estou com o mesmo problema com o DataList para Mobile :cry:
Nao consegui resolver ainda…
Se vc tiver a solucao, posta ai pra gente

:wink:

Tópico antigo… to tendo esse mesmo problema. Alguém conseguiu resolver ?

dei uma olhada nesse link, referente ao jsf 2.0/2.1 parece que isso é um bug do jsf. No tópico ele fala sobre usar um script para corrigir o erro. Porém não sei direito como fazer isso,

se alguém puder ajudar, eu agradeço :slight_smile:

eu achava melhor vc ter aberto outra thread e referenciado esta.

Quanto ao problema, vc está fazendo alguma mudança de página por ajax ? Já tive problemas por conta disso.