tubadc
Novembro 1, 2012, 1:34pm
#1
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
outros imports …
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@SessionScoped
public class UserController implements Serializable {
private static final long serialVersionUID = 314779613879828553L;
@Inject
private UserSessionBeanLocal userSessionBean;
@Inject
private UserGroupSessionBeanLocal userGroupSessionBean;
private List<UserGroup> listUserGroup;
private List<User> listUsers;
private List<User> listFilteredUsers;
private User selectedUser;
private User newUser;
public UserController() {
}
@PostConstruct
public void init() {
newUser = new User();
}
public List<User> getListUsers() {
return userSessionBean.getAllUsers();
}
public void setListUsers(List<User> listUsers) {
this.listUsers = listUsers;
}
public List<User> getListFilteredUsers() {
return listFilteredUsers;
}
public void setListFilteredUsers(List<User> listFilteredUsers) {
this.listFilteredUsers = listFilteredUsers;
}
public User getSelectedUser() {
return selectedUser;
}
public void setSelectedUser(User selectedUser) {
this.selectedUser = selectedUser;
}
public User getNewUser() {
return newUser;
}
public void setNewUser(User newUser) {
this.newUser = newUser;
}
public String doListUsers() {
listUsers = userSessionBean.getAllUsers();
return "/manager/users/list.jsf";
}
public List<User> doFilterUsers() {
return listUsers;
}
public List<UserGroup> getListUserGroup() {
listUserGroup = userGroupSessionBean.getAllUserGroups();
return listUserGroup;
}
}
Mojarra 2.1.6 (SNAPSHOT 20111206)
PrimeFaces 3.4.1
Glassfish 3.1.2
igor_ks
Novembro 1, 2012, 1:41pm
#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>
tubadc
Novembro 1, 2012, 1:48pm
#4
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
tubadc
Novembro 1, 2012, 1:50pm
#5
[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]
tubadc
Novembro 2, 2012, 12:26pm
#8
[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
tubadc
Novembro 2, 2012, 12:32pm
#9
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
Nao consegui resolver ainda…
Se vc tiver a solucao, posta ai pra gente
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
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.