Ho una tabella di dati di PrimeFaces che mostra un insieme di utenti con un comando da eliminare su ogni riga. Quando si fa clic sul collegamento, viene visualizzata una confirmDialog con un pulsante "Sì" che dovrebbe chiamare il metodo "delete" nel backing bean. Sfortunatamente, questo metodo non viene chiamato e la finestra di dialogo è appena nascosta. Il parametro dal collegamento è impostato perché l'ho visto con il debugger.PrimoFaces commandButton in confirmDialog non chiama backing bean
Qui è la mia pagina:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head><title>Manage users</title></h:head>
<h:body>
<ui:composition template="../../template/commonLayout.xhtml">
<ui:define name="content">
<p:layoutUnit position="center">
<h:form id="datatable">
<p:tabView>
<p:tab title="Users">
<p:button value = "Add user" outcome="addUser.xhtml?faces-redirect=true"/>
<p:growl id="messages" showDetail="true"/>
<p:dataTable id="usersTable" var="user" value="#{userMB.userList}" paginator="true" rows="25"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}">
<p:ajax event="rowEdit" listener="#{userMB.onEditUser}" />
<p:column headerText="First name">
<h:outputText value="#{user.firstName}" />
</p:column>
<p:column headerText="Last name">
<h:outputText value="#{user.lastName}" />
</p:column>
<p:column headerText="E-mail">
<h:outputText value="#{user.email}" />
</p:column>
<p:column headerText="Username">
<h:outputText value="#{user.username}"/>
</p:column>
<p:column headerText="Hire date">
<h:outputText value="#{user.hireDate}">
<f:convertDateTime type="date" pattern="dd.MM.yyyy"/>
</h:outputText>
</p:column>
<p:column headerText="Working hours">
<h:outputText value="#{user.workingHours}" />
</p:column>
<p:column headerText="Vacation days">
<h:outputText value="#{user.vacationDays}"/>
</p:column>
<p:column>
<h:link outcome="addUser" value="Edit">
<f:param name="userID" value="#{user.id}" />
</h:link>
</p:column>
<p:column>
<p:commandLink value="Delete" onclick="deleteConfirmDlg.show()">
<f:setPropertyActionListener value="#{user}" target="#{userMB.currentUser}" />
</p:commandLink>
</p:column>
</p:dataTable>
<p:confirmDialog id="deleteConfirmDialog" message="Are you sure?" header="Delete user" severity="alert" widgetVar="deleteConfirmDlg" appendToBody="true">
<p:commandButton id="confirmDelete" value="Yes" oncomplete="deleteConfirmDlg.hide()" update="usersTable" actionListener="#{userMB.deleteUser}"/>
<p:commandButton id="declineDelete" value="No" onclick="deleteConfirmDlg.hide()" type="button"/>
</p:confirmDialog>
</p:tab>
<p:tab title="Teams">
<p:button value = "Add team" outcome="addTeam.xhtml?faces-redirect=true"/>
<p:dataTable var="team" value="#{userMB.teamList}" paginator="true" rows="25"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}">
<p:column headerText="Name">
<h:outputText value="#{team.name}" />
</p:column>
<p:column headerText="Team leader">
<h:outputText value="#{team.teamLeader.displayName}" />
</p:column>
</p:dataTable>
</p:tab>
</p:tabView>
</h:form>
</p:layoutUnit>
</ui:define>
</ui:composition>
Backing metodo di fagioli:
public void deleteUser(ActionEvent event) {
if (null != currentUser) {
// check if userID is set and delete
System.out.println("delete user with id " + currentUser.getId());
userService.deleteUser(currentUser);
currentUser = new User();
}
}
ho controllato e non ho nidificati forme in quanto questo è il caso più usuale per la backing bean not be called ...
Ecco il mio file template es:
CommonLayout.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<h:outputStylesheet library="css" name="default.css" />
</h:head>
<h:body>
<p:layout fullPage="true">
<div id ="header">
<ui:insert name="header">
<ui:include src="commonHeader.xhtml"></ui:include>
</ui:insert>
</div>
<div id="left-menu">
<ui:insert name="left-menu">
<ui:include src="leftMenu.xhtml"></ui:include>
</ui:insert>
</div>
<div id ="content">
<ui:insert name="content">
<ui:include src="commonContent.xhtml"></ui:include>
</ui:insert>
</div>
</p:layout>
</h:body>
</html>
CommonHeader.xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition>
<p:layoutUnit position="north" size="100">
<h:outputText value="Welcome #{request.remoteUser}!"/> <br />
<a href="#{request.contextPath}/j_spring_security_logout">Logout</a><br />
</p:layoutUnit>
</ui:composition>
</h:body>
</html>
CommonContent.xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition>
<p:layoutUnit position="center">
<ui:include src="../widgets/schedule.xhtml"/>
</p:layoutUnit>
</ui:composition>
</h:body>
</html>
LeftMenu.xhtml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<ui:composition>
<p:layoutUnit position="west" size="200">
<h:form>
<p:menu width="100%" rendered="#{request.isUserInRole('ROLE_MANAGER')}">
<p:submenu label="Management">
<p:menuitem value="Manage users" outcome="/pages/management/manageUsers.xhtml?faces-redirect=true"></p:menuitem>
</p:submenu>
</p:menu>
</h:form>
</p:layoutUnit>
</ui:composition>
</h:body>
</html>
Sto usando primefaces 3.4 e JSF 2.0
Mi dispiace, ma non ho nemmeno letto l'intero post. È veramente necessario tutto questo codice/testo? Saluti! – SimonSez
C'è davvero molto rumore nel codice (prova a minimizzarlo nelle domande future), ma fortunatamente il sintomo descritto è stato sufficiente a capire/indovinare la causa del problema senza mai guardare il codice :) – BalusC
Scusa, volevo includi anche i miei file modello per essere sicuro che non ci fossero altri moduli annidati da qualche parte. – AndaP