p:commandButton in p:dataTable

10,139

I found the problem. There is a second bean, which provides my datamodel for the first datatable. This bean was RequestScoped and not ViewAccessScoped as the main backing bean. I changed the scope and now the button call is working.

Share:
10,139
LStrike
Author by

LStrike

FNORD

Updated on June 04, 2022

Comments

  • LStrike
    LStrike almost 2 years

    I got a problem with a p:commandButton inside a p:dataTable My button does not call the procedure in my backing bean. Does anyone have an idea why this button won't work?

    Best Regards

    Button Code:

     <p:column headerText="Details" style="width: 10px;">
                                <p:outputPanel id="buttonDetail">
                                    <p:commandButton icon="ui-icon-vwfList" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.selectHistoryElement()}"
                                                    id="buttonDetail"                                           
                                                    update=":historyDetail"
                                                    title="GO!!!">
                                    </p:commandButton>
                                </p:outputPanel>
                            </p:column>
    

    Full Code of JSF-Page:

     <?xml version="1.0" encoding="UTF-8"?>
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui"
        xmlns:m="http://java.sun.com/jsf/composite/components/mmnet">
    
            <h:form id="historyList">
    
    
                    <p:dataTable id="historyTable"
                                value="#{customerChangeHistoryListHandler.dataModel}"
                                var="_history"
                                lazy="true"
                                paginator="true" 
                                rows="20"
                                paginatorAlwaysVisible="false"
                                paginatorPosition="bottom" 
                                rowsPerPageTemplate="5,10,15,20,25,50"
                                paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                                selectionMode="single"
                                selection="#{customerChangeHistoryHandler.entity}"
                                style="margin-top:5px;">
    
    
                    <f:facet name="header">
                        <h:outputText   value="#{labels.historie} (#{customerChangeHistoryListHandler.dataModel.rowCount})"/>
                    </f:facet>
    
                        <p:ajax event="rowSelect" listener="#{customerChangeHistoryHandler.onRowSelect}" update=":contentPanel"/>
    
                            <p:column headerText="#{labels.typ}"
                                style="width: 10px;">
                                <p:outputPanel id="buttonImage">
                                    <p:commandButton icon="ui-icon-workflow" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.onRowSelect}"
                                                    update=":contentPanel" 
                                                    rendered="#{_history.changeType == 'WORKFLOW_CHANGED' or _history.changeType == 'WORKFLOW_CREATED' or _history.changeType == 'WORKFLOW_DELETED'}">
                                    </p:commandButton>
                                    <p:commandButton icon="ui-icon-note" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.onRowSelect}"
                                                    update=":contentPanel" 
                                                    rendered="#{_history.changeType == 'NOTE_CHANGED' or _history.changeType == 'NOTE_CREATED' or _history.changeType == 'NOTE_DELETED'}">
                                    </p:commandButton>
                                    <p:commandButton icon="ui-icon-diso" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.onRowSelect}"
                                                    update=":contentPanel" 
                                                    rendered="#{_history.changeType == 'ERP_CHANGE'}">
                                    </p:commandButton>
                                    <p:commandButton icon="ui-icon-info" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.onRowSelect}"
                                                    update=":contentPanel" 
                                                    rendered="#{_history.changeType == 'CUSTOMER_MERGED'}">
                                    </p:commandButton>
                                    <p:commandButton icon="ui-icon-arrowthickstop-1-s" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.onRowSelect}"
                                                    update=":contentPanel" 
                                                    rendered="#{_history.changeType == 'FILE_UPLOADED'}">
                                    </p:commandButton>
                                </p:outputPanel>
                            </p:column>
    
                            <p:column headerText="Details" style="width: 10px;">
                                <p:outputPanel id="buttonDetail">
                                    <p:commandButton icon="ui-icon-vwfList" 
                                                    styleClass="colButton" 
                                                    action="#{customerChangeHistoryHandler.selectHistoryElement()}"
                                                    id="buttonDetail"                                           
                                                    update=":historyDetail"
                                                    title="GO!!!">
                                    </p:commandButton>
                                </p:outputPanel>
                            </p:column>
    
                            <p:column headerText="ChangeType"
                                        sortBy="#{_history.changeType}">
                                <h:outputText value="#{labels[_history.changeType]}" />
                            </p:column>
    
                            <p:column headerText="#{labels.beschreibung}">
                                <h:outputText value="#{_history.description}" />
                            </p:column>
    
                            <p:column headerText="#{labels.modDate} und #{labels.modUser}"
                                    sortBy="#{_history.modDate}">
                                <m:outputDateUser valueDate="#{_history.modDate}" valueUser="#{_history.modUser}" />
                            </p:column>
    
                    </p:dataTable>
    
            </h:form>
    
            <h:form id="historyDetail">
    
                    <p:panel id="detailPanel" rendered="#{customerChangeHistoryHandler.entity != null}">
                    History Detail --> ToDo
                    </p:panel>  
    
            </h:form>
    
    </ui:composition>
    

    Backing Bean:

    import javax.inject.Inject;
    import javax.inject.Named;
    
    import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ViewAccessScoped;
    import org.primefaces.event.SelectEvent;
    
    @Named
    @ViewAccessScoped
    public class CustomerChangeHistoryHandler extends JccPersistenceHandler<Integer, CustomerChangeHistory>{
    
        @Inject
        NewsMessageHandler newsMessageHandler;
    
        @Inject
        DebitorenakteState debitorenakteState;
    
        @Inject
        private WorkflowHandler workflowHandler;
    
    
        @Override
        protected Class<CustomerChangeHistory> getEntityType() {
            return CustomerChangeHistory.class;
        }
    
        @Override
        public CustomerChangeHistory getEntity() {
            return super.getEntity();
        }
    
        @Override
        public void onRowSelect(SelectEvent event) {
            Integer tmpId = this.entity.getLinkedId();
            try {
                ChangeType tmpChangeType = this.entity.getChangeType(); 
                if(tmpChangeType.equals(CustomerChangeHistory.ChangeType.WORKFLOW_CHANGED) || tmpChangeType.equals(CustomerChangeHistory.ChangeType.WORKFLOW_CREATED) || tmpChangeType.equals(CustomerChangeHistory.ChangeType.WORKFLOW_DELETED)){
                    workflowHandler.setSelectionId(tmpId);
                    workflowHandler.selectById();
                    workflowHandler.select();
                } else if(tmpChangeType.equals(CustomerChangeHistory.ChangeType.NOTE_CHANGED) || tmpChangeType.equals(CustomerChangeHistory.ChangeType.NOTE_CREATED) || tmpChangeType.equals(CustomerChangeHistory.ChangeType.NOTE_DELETED)){
                    newsMessageHandler.setSelectionId(tmpId);
                    newsMessageHandler.selectById();
                    newsMessageHandler.onRowSelect(event);
                    debitorenakteState.setActivePage(DebitorenakteEnvironment.PAGE_MORE_NOTES);
                    debitorenakteState.setActiveTabIndex(6);
                } else if(tmpChangeType.equals(CustomerChangeHistory.ChangeType.ERP_CHANGE)){
    
                    //TODO
    
                } else if(tmpChangeType.equals(CustomerChangeHistory.ChangeType.CUSTOMER_MERGED)){
    
                    //TODO
    
                } else if(tmpChangeType.equals(CustomerChangeHistory.ChangeType.FILE_UPLOADED)){
    
                    //TODO
    
                } else {
                    logError("ChangeType nicht gefunden: " + this.entity.getChangeType().toString());
                }
                super.onRowSelect(event);
            } catch (Exception e) {
                // TODO: handle exception
                jsfMessageService.info("Eintrag nicht mehr vorhanden", event);
            }   
        }
    
        public void selectHistoryElement(){
            System.out.println("<-------------------------YEA, Button pressed!!! --------------------------------->");
    //      logDebug("Showing History Entity: " + this.entity);
        }
    
    }
    

    Is there a way to let the bean for the data model RequestScoped?