0
votes

I am writing code for adding and viewing vendor. But the issue is that, i added a dataexporter to export the table in different format. When i click on the dataexporter, it validates inpuut fields instead of exporting the datatable. see code below,

  <h:panelGrid columns="6">
                            <p:outputLabel value="Vendor Name: " for="vname"/>
                            <p:inputText id="vname" required="true" value="#{bank.vendor_name}" />
                            <p:message for="vname"/>

                            <p:outputLabel value="Vendor Bank: " for="bank"/>
                            <p:selectOneMenu id="bank" value="#{bank.bankmode.bankName}" required="true" requiredMessage="Bank required">


                                <f:selectItem itemLabel="--Select Bank--" itemValue="" noSelectionOption="true"/>
                                <f:selectItems value="#{bank.bankmodel}"
                                               var="singlevalue"  
                                               itemLabel="#{singlevalue.bankName}"
                                               itemValue="#{singlevalue.bankName}"/>
                            </p:selectOneMenu>


                            <p:message for="bank"/>

                            <p:outputLabel value="Vendor Account Number: " for="anum"/>
                            <p:inputText id="anum" required="true" value="#{bank.vendor_acct}" requiredMessage="Account Number required" />
                            <p:message for="anum"/>

                            <p:outputLabel value="Vendor Contact Address: " for="adress"/>
                            <p:inputTextarea id="adress" required="true" value="#{bank.vendor_address}" requiredMessage="Contact Address required" />
                            <p:message for="adress"/>

                            <p:outputLabel value="Vendor Email Address: " for="email"/>
                            <p:inputText id="email" required="true" label="email" size="40"
                                         requiredMessage="Please enter your email address."
                                         validatorMessage="Invalid email format"
                                         value="#{bank.vendor_email}">

                                <f:validateRegex
                                    pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />

                            </p:inputText>
                            <p:message for="email" />

                            <p:outputLabel value="Vendor Phone Number " for="pnum"/>
                            <p:inputText id="pnum" required="true" value="#{bank.vendor_phone}" requiredMessage="Phone number required" />
                            <p:message for="pnum"/>

                            <p:commandButton value="save" process="@this vname,bank,anum,adress,email,pnum" update=":templateForm:growl,singleTB,ven" actionListener="#{bank.insertData}" />

                        </h:panelGrid>
  <p:dataTable var="ven_tab" id="singleTB"
                                         value="#{bank.vendorList}" 
                                         rowKey="#{ven_tab.id}"
                                         selection="#{bank.selectedList}" selectionMode="single"
                                         rows="10"                                        
                                         editable="true"                                         
                                         paginatorTemplate="{CurrentPageReport}  
                                         {FirstPageLink} {PreviousPageLink} 
                                         {PageLinks} {NextPageLink} {LastPageLink} "
                                         paginator="true" style="margin-bottom:20px"
                                         rowsPerPageTemplate="5,10,15">

                                <p:ajax event="rowEdit" listener="#{bank.onRowEdit}" update=":templateForm:growl" />
                                <p:ajax event="rowEditCancel" listener="#{bank.onRowCancel}" update=":templateForm:growl" />

                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Vendor Id"/>
                                    </f:facet>

                                    <h:outputText value="#{ven_tab.vendorId}"/>

                                </p:column>

                                <p:column>

                                    <f:facet name="header">
                                        <h:outputText value="Vendor Name"/>
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output"><h:outputText value="#{ven_tab.vendorName}"/></f:facet>
                                        <f:facet name="input"><p:inputText value="#{ven_tab.vendorName}"  required="true"  requiredMessage="Name is required" style="width:96%"/></f:facet>
                                    </p:cellEditor>


                                </p:column>

                                <p:column>

                                    <f:facet name="header">
                                        <h:outputText value="Vendor Phone Number"/>
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output"><h:outputText value="#{ven_tab.vendorPnum}"/></f:facet>
                                        <f:facet name="input"><p:inputText value="#{ven_tab.vendorPnum}" required="true" requiredMessage="Phone is required" style="width:96%"/></f:facet>
                                    </p:cellEditor>


                                </p:column>

                                <p:column>

                                    <f:facet name="header">
                                        <h:outputText value="Vendor Email"/>
                                    </f:facet>

                                    <p:cellEditor>
                                        <f:facet name="output"><h:outputText value="#{ven_tab.vendorEmail}"/></f:facet>
                                        <f:facet name="input"><p:inputText required="true" value="#{ven_tab.vendorEmail}" requiredMessage="Email is required" style="width:96%"/></f:facet>
                                    </p:cellEditor>


                                </p:column>
                                <p:column>

                                    <f:facet name="header">
                                        <h:outputText value="Vendor Contact Address"/>
                                    </f:facet>

                                    <p:cellEditor>
                                        <f:facet name="output"> <h:outputText value="#{ven_tab.vendorContact}"/></f:facet>
                                        <f:facet name="input"><p:inputText required="true" value="#{ven_tab.vendorContact}" requiredMessage="Contact is required" style="width:96%"/></f:facet>
                                    </p:cellEditor>


                                </p:column>
                                <p:column>

                                    <f:facet name="header">
                                        <h:outputText value="Vendor Bank"/>
                                    </f:facet>

                                    <p:cellEditor>
                                        <f:facet name="output"> <h:outputText value="#{ven_tab.vendorBank}"/></f:facet>
                                        <f:facet name="input">  
                                            <p:selectOneMenu id="bank" style="width:100%" value="#{ven_tab.vendorBank}" required="true" requiredMessage="Bank required">

                                                <f:selectItem itemLabel="--Select Bank--" itemValue="" noSelectionOption="true"/>
                                                <f:selectItems value="#{bank.bankmodel}"
                                                               var="singlevalue"  
                                                               itemLabel="#{singlevalue.bankName}"
                                                               itemValue="#{singlevalue.bankName}"/>
                                            </p:selectOneMenu></f:facet>
                                    </p:cellEditor>
                                </p:column>
                                <p:column>
                                    <f:facet name="header">
                                        <h:outputText value="Vendor Account Number"/>
                                    </f:facet>
                                    <p:cellEditor>
                                        <f:facet name="output"> <h:outputText value="#{ven_tab.vendorAcct}"/></f:facet>
                                        <f:facet name="input"><p:inputText required="true" value="#{ven_tab.vendorAcct}" requiredMessage="Account is required" style="width:96%"/></f:facet>
                                    </p:cellEditor> 
                                </p:column>
                                <p:column style="width:32px">
                                    <p:rowEditor   />
                                </p:column>


                            </p:dataTable> 

                            <h3>Export Page Data Only</h3>
                            <p:contextMenu for="singleTB" rendered="#{bank.status}" >
                                <p:menuitem value="Delete" process="@this singleTB" update=":templateForm:growl,singleTB" icon="ui-icon-close" actionListener="#{bank.deleteCar}"/>
                            </p:contextMenu>
                            <h:commandLink>
                                <p:graphicImage value="/images/excel.png" />
                                <p:dataExporter type="xls" target="singleTB" fileName="report" pageOnly="true"/>
                            </h:commandLink>

                            <h:commandLink>
                                <p:graphicImage value="/images/pdf.png" />
                                <p:dataExporter type="pdf" target="singleTB" fileName="report" pageOnly="true" />
                            </h:commandLink>

                            <h:commandLink>
                                <p:graphicImage value="/images/csv.png" />
                                <p:dataExporter type="csv" target="singleTB" fileName="report" pageOnly="true" />
                            </h:commandLink>

                            <h:commandLink>
                                <p:graphicImage value="/images/xml.png" />
                                <p:dataExporter type="xml" target="singleTB" fileName="report" pageOnly="true" />
                            </h:commandLink>

Please assist. I have been trying to fix this for sometime now and keep getting thesame result. Thanks

1

1 Answers

1
votes

JSF has 6 life cycle phases. One of them is the Process Validation phase. In this phase, the validation of input components (e.g., input fields) takes place. In your case, you do not want the validation to takes place. So what you do is adding an immediate attribute to your commandlink component as:

<h:commandLink immediate="true">
    <p:graphicImage value="/images/excel.png" />
    <p:dataExporter type="xls" target="singleTB" fileName="report" pageOnly="true"/>
</h:commandLink>

With this setting all the life cycle phases after the Apply Request Values until the Render Response phase will be skipped.