Botón en el cuadro de diálogo no entra en función declarada en la haba
-
21-12-2019 - |
Pregunta
El problema es que cuando en el cuadro de diálogo haga clic en el botón con el valor de "Agregar" la función "Añadir" en el bean no se llama( me di cuenta de que con system.out
) y no entiendo por qué.Es que algunos limitación de diálogo que se debe cerrar con un onComplete
etiqueta o algo más??O tal vez porque no puedo usar el botón de acción en el diálogo?Espero que alguien me pueda ayudar.Gracias.Yo tengo mi página xhtml:
<!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>Add a Confirmed Package</title>
</h:head>
<h:body>
<h:form id="form">
<p:dataTable id="packages" var="defpack" value="#{addConfirmedPackageBean.defpackagesDTO}" rowKey="#{defpack.name}"
selection="#{addConfirmedPackageBean.packageSelected}" selectionMode="single">
<f:facet name="header">
Click "View" button after selecting a row to see details
</f:facet>
<p:column headerText="NamePackage">
#{defpack.name}
</p:column>
<p:column style="width:4%">
<p:commandButton id="selectButton" update=":form:display" oncomplete="PF('Personalizza').show()" icon="ui-icon-heart" title="Modify" action="#{addConfirmedPackageBean.savelocation()}">
<f:setPropertyActionListener value="#{defpack}" target="#{addConfirmedPackageBean.packageSelected}" />
</p:commandButton>
</p:column>
<f:facet name="footer">
<p:commandButton id="viewButton" value="Scelgo"
icon="ui-icon-search" update=":form:display"
action="#{addConfirmedPackageBean.fine()}" />
</f:facet>
</p:dataTable>
<p:dialog id="Personalizzazione" header="Personalizza Pacchetto" widgetVar="Personalizza" resizable="false"
width="400" showEffect="clip" hideEffect="fold">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputLabel for="Flight">Personalizza il tuo flight:</h:outputLabel>
<h:selectOneMenu for="Flight" value="#{addConfirmedPackageBean.fly}">
<f:selectItems id="Flight"
value="#{addConfirmedPackageBean.elelislocationflightPacchetto}" var="ElementDTO"
itemValue="#{ElementDTO.name}" itemLabel="#{ElementDTO.name}" />
</h:selectOneMenu>
<h:outputLabel for="Hotel">Personalizza il tuo Hotel:</h:outputLabel>
<h:selectOneMenu for="Hotel" value="#{addConfirmedPackageBean.hotel}">
<f:selectItems id="Hotel"
value="#{addConfirmedPackageBean.elelislocationhotelPacchetto}" var="ElementDTO"
itemValue="#{ElementDTO.name}" itemLabel="#{ElementDTO.name}" />
</h:selectOneMenu>
</h:panelGrid>
<p:commandButton id="Bottone" value="Add" update="display" action="#{addConfirmedPackageBean.Add()}"/>
</p:dialog>
</h:form>
</h:body>
</html>
Y mi bean:
package beans;
import java.util.ArrayList;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import confirmedPackageManagement.ConfirmedPackageMgr;
import confirmedPackageManagementDTO.ConfirmedPackageDTO;
import elementManagement.ElementMgr;
import elementManagementDTO.ElementDTO;
import DefaultPackageManagement.DefaultPackageMgr;
import DefaultPackageManagementDTO.DefaultPackageDTO;
@ManagedBean(name="addConfirmedPackageBean") //come viene richiamato
@RequestScoped
public class AddConfirmedPackageBean {
@EJB
private DefaultPackageMgr defpackMgr;
@EJB
private ConfirmedPackageMgr confpackMgr;
@EJB
private ElementMgr eleMgr;
private ArrayList<DefaultPackageDTO> defpackagesDTO;
private DefaultPackageDTO packageSelected;
private ArrayList<ElementDTO> elelislocationflightPacchetto;
private ArrayList<ElementDTO> elelislocationhotelPacchetto;
private String locationSelected;
private String name;
private String fly;
private String hotel;
private ConfirmedPackageDTO confpackageDTO;
private ArrayList<ElementDTO> elements;
public AddConfirmedPackageBean(){
confpackageDTO=new ConfirmedPackageDTO();
this.elements=new ArrayList<ElementDTO>();
this.packageSelected=new DefaultPackageDTO();
}
@PostConstruct
public void init()
{
this.setDefpackagesDTO(defpackMgr.getAllDefaultPackage());
}
public void savelocation(){
this.locationSelected=this.packageSelected.getLocation();
this.setElelislocationflightPacchetto(eleMgr.getAllFlightsByLocation(locationSelected));
this.setElelislocationhotelPacchetto(eleMgr.getAllHotelsByLocation(locationSelected));
System.out.println("cazzo il mio pacchetto ha location ");
}
public ArrayList<ElementDTO> getElelislocationhotelPacchetto() {
return elelislocationhotelPacchetto;
}
public void setElelislocationhotelPacchetto(
ArrayList<ElementDTO> elelislocationhotelPacchetto) {
this.elelislocationhotelPacchetto = elelislocationhotelPacchetto;
}
public ArrayList<ElementDTO> getElelislocationflightPacchetto() {
return elelislocationflightPacchetto;
}
public void setElelislocationflightPacchetto(
ArrayList<ElementDTO> elelislocationflightPacchetto) {
this.elelislocationflightPacchetto = elelislocationflightPacchetto;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocationSelected() {
return locationSelected;
}
public void setLocationSelected(String locationSelected) {
this.locationSelected = locationSelected;
}
public DefaultPackageDTO getPackageSelected() {
return packageSelected;
}
public void setPackageSelected(DefaultPackageDTO packageSelected) {
this.packageSelected = packageSelected;
}
public ArrayList<DefaultPackageDTO> getDefpackagesDTO() {
return defpackagesDTO;
}
public void setDefpackagesDTO(ArrayList<DefaultPackageDTO> defpackagesDTO) {
this.defpackagesDTO = defpackagesDTO;
}
public String fine(){
return "/employee/index?faces-redirect=true";
}
public String Add(){
System.out.print("il pacchetto confermato ha il nome ");
System.out.print("il pacchetto confermato ha il nome "+this.confpackageDTO.getName());
this.AssignElemFlyFromSelection();
this.AssignElemHotelFromSelection();
this.confpackageDTO.setName(this.packageSelected.getName());
this.confpackageDTO.setLocation(this.packageSelected.getLocation());
this.confpackageDTO.setElem(this.elements);
System.out.print("il pacchetto confermato ha il nome "+this.confpackageDTO.getName());
System.out.print("il pacchetto confermato ha la location "+this.confpackageDTO.getLocation());
System.out.print("il pacchetto confermato ha l'hotel "+this.confpackageDTO.getElem().get(0).getName());
System.out.print("il pacchetto confermato ha il volo "+this.confpackageDTO.getElem().get(1).getName());
this.confpackMgr.save(this.confpackageDTO);
return "/employee/index?faces-redirect=true";
}
public String getFly() {
return fly;
}
public void setFly(String fly) {
this.fly = fly;
}
public String getHotel() {
return hotel;
}
public void setHotel(String hotel) {
this.hotel = hotel;
}
private void AssignElemFlyFromSelection()
{
for (ElementDTO elem:this.elelislocationflightPacchetto)
{
if(elem.getName().equals(this.fly))
{
this.elements.add(elem);
}
}
}
private void AssignElemHotelFromSelection()
{
for (ElementDTO elem:this.elelislocationhotelPacchetto)
{
if(elem.getName().equals(this.hotel))
{
this.elements.add(elem);
}
}
}
}
Solución
<p:commandButton id="Bottone" value="Add" update="display" actionListener="#{addConfirmedPackageBean.Add()}" process=":form:display,:form:packages,@this"/>
Sólo tienes que procesar los datos de cuadro de diálogo.
Solución:Cambio RequestScoped a ViewScoped (Comentarios)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow