Reputation: 63
I am having trouble getting my actionListener
in a <p:commandButton>
to fire inside of a dialog. I've tried changing it to action, removing the ()
, adding the ()
, changing the scope of the managed bean, moving around the ajax statements and nothing has helped so far. Everything worked until I updated Netbeans, everything broke, somehow a library was removed, it was the commons-fileupload jar.
This happened with no changes to the code, only after netbeans updated. Netbeans 7.3, JSF2.2, Tomcat 7, jdk1.7, primefaces 4.0. There is a working version of this inside of my tomcat manager application, if I could possibly retrieve that hopefully everything would be back in working order but I can't find anything about getting the files back from tomcat. So my question is, why is this not firing? Is it the order of my calls in the button? I can't wrap my head around why this is not working.
EDIT Error I recieve after switching form and dialog positions -
Jul 10, 2014 11:50:48 AM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/sampleExport.xhtml]
javax.faces.FacesException: Cannot find component with expression ":searchDialogID" referenced from "mainForm:j_idt22".
at org.primefaces.expression.SearchExpressionFacade.resolveComponentInternal(SearchExpressionFacade.java:271)
EDIT 3 Revised Bean
@ManagedBean
@ViewScoped
public class SampleExportController implements Serializable {
//Variables used to show or hide panels on the webpage
private boolean _addTill = false;
private boolean _allowAddingExport;
private boolean _allowDelExport;
private boolean _allowModExport;
private boolean _allowReading;
private boolean _previousCrop;
private boolean _spreadSelected;
//Variables Used For Whole Form
private ArrayList<Account> _agronomers;
private StreamedContent _file;
private ArrayList<String> _growers;
private SampleSearch _search;
private LabSampleHelper _labHelper;
private ArrayList<AdminLabNumber> _labNumbers;
private NutrientsGuide _nutriGuide;
private SampleAdminHelper _saHelper;
private List<String> _sampleTypes;
private SampleAlter _selectedSample;
private AdminLabNumber _selectedLab;
private QueryHelper _qHelper;
private List<String> _years;
public SampleExportController() {
AllowedRights awdRight = AllowedRights.getAllowedRights();
Access rights = awdRight.getAccessRigths("exportSample");
if (rights != null) {
_allowAddingExport = rights.getOperationAdd();
_allowDelExport = rights.getOperationDel();
_allowModExport = rights.getOperationMod();
_allowReading = rights.getReadAccess();
} else {
_allowAddingExport = false;
_allowDelExport = false;
_allowModExport = false;
_allowReading = false;
}
_search = new SampleSearch();
_saHelper = new SampleAdminHelper();
_qHelper = new QueryHelper();
_years = _saHelper.getYears();
if (_years != null && !_years.isEmpty()) {
_search.setYear(_years.get(0));
}
_sampleTypes = _saHelper.getSampleTypes();
_labHelper = new LabSampleHelper();
}
public void initSearch() {
AccountHelper acHelper = new AccountHelper();
_agronomers = acHelper.getAllAgronomers();
SampleAdminHelper saHelper = new SampleAdminHelper();
_growers = saHelper.getAllGrowers();
}
public void loadSearch() {
UIComponent table = FacesContext.getCurrentInstance().getViewRoot().findComponent(":mainForm:DTsamples");
table.setValueExpression("sortBy", null);
_search.setStage("Completed");
_labNumbers = _saHelper.exportSampleSearch(_search);
ExportFormatHelper efHelper = new ExportFormatHelper();
for (int i = 0; i < _labNumbers.size(); i++) {
_labNumbers.get(i).addExportSettings(efHelper.getFormats(_labNumbers.get(i).getAccountNumber(), _labNumbers.get(i).getSampleType()));
}
//loadExportSettings from account
_agronomers.clear();
_growers.clear();
}
/**
* @return the _search
*/
public SampleSearch getSearch() {
return _search;
}
/**
* @return the _labNumbers
*/
public ArrayList<AdminLabNumber> getLabNumbers() {
return _labNumbers;
}
/**
* @return the _agronomers
*/
public ArrayList<Account> getAgronomers() {
return _agronomers;
}
/**
* @return the _growers
*/
public ArrayList<String> getGrowers() {
return _growers;
}
/**
* @return the _selectedSample
*/
public SampleAlter getSelectedSample() {
return _selectedSample;
}
/**
* @param selectedSample the _selectedSample to set
*/
public void setSelectedSample(SampleAlter selectedSample) {
this._selectedSample = selectedSample;
//This gets the value of the initial till level from the sample
_initialTill = _selectedSample.getTilled();
_initialPreviousCrop = _selectedSample.getPreviousCrop();
if (selectedSample.getSampleType().equalsIgnoreCase("Soil")) {
if (_crop1 == null | _crop2 == null || _crop3 == null) {
_crop1 = new CropGuide(_qHelper, _selectedSample);
_crop2 = new CropGuide(_qHelper, _selectedSample);
_crop3 = new CropGuide(_qHelper, _selectedSample);
}
_nutriGuide = new NutrientsGuide(_crop1.getRec(),_selectedSample);
boolean flag1, flag2, flag3;
flag1 = _crop1.refresh();
flag2 = _crop2.refresh();
flag3 = _crop3.refresh();
if (flag1 || flag2 || flag3) {
RequestContext.getCurrentInstance().update("nutrientguides");
}
}
}
/**
* @return the _file
*/
public StreamedContent getFile() {
return _file;
}
/**
* @return the _selectedLab
*/
public AdminLabNumber getSelectedLab() {
return _selectedLab;
}
/**
* @param selectedLab the _selectedLab to set
*/
public void setSelectedLab(AdminLabNumber selectedLab) {
this._selectedLab = selectedLab;
}
/**
* @return the _years
*/
public List<String> getYears() {
return _years;
}
/**
* @return the _sampleTypes
*/
public List<String> getSampleTypes() {
return _sampleTypes;
}
public void setPreviousCrop(boolean _previousCrop) {
this._previousCrop = _previousCrop;
}
}
xhtml mostly full
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:body>
<ui:composition template="template/desktop_viewer.xhtml">
<ui:define name="PageName">
<title>Sample Export</title>
</ui:define>
<ui:define name="PageHeader">
Sample Export
</ui:define>
<ui:define name="PageLocation">
Viewer
</ui:define>
<ui:define name="Body" >
<script type="text/javascript">
function start() {
statusDialog.show();
}
function stop() {
statusDialog.hide();
}
</script>
<h:form id="mainForm" rendered="#{sampleExportController.allowReading eq true}">
<p:dialog modal="true" widgetVar="statusDialog" header="Status" resizable="false" draggable="false" closable="false" appendToBody="true">
<p:graphicImage value="./resources/images/ajaxloading.gif" />
</p:dialog>
<p:ajaxStatus style="width:16px;height:16px;" id="ajaxStatusPanel">
<f:facet name="start">
<h:graphicImage value="./resources/images/ajaxloading.gif" />
</f:facet>
<f:facet name="complete">
<h:outputText value="" />
</f:facet>
</p:ajaxStatus>
<p:growl id="growl" showDetail="true" autoUpdate="true"/>
<p:commandButton oncomplete="searchDialog.show()" update=":innerSearch:searchDialogID" value="Search" icon="ui-icon-search" actionListener="#{sampleExportController.initSearch}"/>
<p:dataTable id="DTsamples" widgetVar="DTsamplesVw" var="labNumbers" value="#{sampleExportController.labNumbers}"
paginator="true" rows="10" scrollable="true" rowStyleClass="#{labNumbers.rowColorByType}">
<p:column style="width:10px">
<p:rowToggler />
</p:column>
<p:column headerText="LabNumber" footerText="LabNumber">
#{labNumbers.number}
</p:column>
<p:column headerText="Sample Type" footerText="Sample Type">
#{labNumbers.sampleType}
</p:column>
<p:rowExpansion >
<p:panelGrid style="width: 460px;">
<f:facet name="header">
<p:row>
<p:column colspan="1" style="width: 320px">
Submitter
</p:column>
<p:column colspan="1" style="width:150px">
Lab Number Report Export
</p:column>
<p:column colspan="1" style="width: 280px">
Lab Number CSV Export
</p:column>
</p:row>
</f:facet>
<p:row>
<p:column>
<h:panelGrid columns="1" styleClass="Ignore" >
<h:outputText value=" #{''.concat(labNumbers.getSamples().get(0).agronomer.accountNumber).concat(' - ').concat(labNumbers.getSamples().get(0).agronomer.lastName ).concat(' , ').concat(labNumbers.getSamples().get(0).agronomer.firstName)}"/>
<h:outputText value=" #{'Email: '.concat(labNumbers.getSamples().get(0).agronomer.primaryEmail)}"/>
<h:outputText value=" #{'Email 2: '.concat(labNumbers.getSamples().get(0).agronomer.email2)}"/>
<h:outputText value=" #{'Email 3: '.concat(labNumbers.getSamples().get(0).agronomer.email3)}"/>
</h:panelGrid>
</p:column>
<p:column style="text-align: center;">
<h:panelGrid styleClass="Ignore">
<p:commandLink ajax="false" id="AlternativeValues" onclick="PrimeFaces.monitorDownload(start, stop)" actionListener="#{sampleExportController.generateAlternativeValueReport(labNumbers,false)}">
<p:fileDownload value ="#{sampleExportController.file}" />
</p:commandLink>
<p:commandLink ajax="false" id="multiPdf" onclick="PrimeFaces.monitorDownload(start, stop)" actionListener="#{sampleExportController.generateMultiSampleReportPDFLab(labNumbers,false)}">
<p:fileDownload value="#{sampleExportController.file}" />
<p:graphicImage value="./resources/images/pdf.png" alt="Download the report by lab Number as a PDF." title="Normal Report"/>
</p:commandLink>
<p:commandLink ajax="false" id="multiPdfPage" onclick="PrimeFaces.monitorDownload(start, stop)" actionListener="#{sampleExportController.generateMultiSampleReportPDFLab(labNumbers,true)}" rendered="#{labNumbers.sampleType eq 'Manure'}">
<p:fileDownload value="#{sampleExportController.file}" />
<p:graphicImage value="./resources/images/pdf_multi.jpg" alt="Download the report by lab Number as a PDF." title="Sample Per Page Report"/>
</p:commandLink>
</h:panelGrid>
</p:column>
<p:column>
<p:outputLabel for="exportsetting" value="Export Setting:"/>
<p:selectOneMenu id="exportsetting" value="#{labNumbers.selectedExport}" effect="fade" style="width:160px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{labNumbers.exportSettings}" var="export" itemLabel="#{export}" itemValue="#{export}" />
<p:ajax update=":mainForm:DTsamples:downloadLink" event="change" listener="#{sampleExportController.setSelectedLab(labNumbers)}"/>
</p:selectOneMenu>
<p:commandLink id="downloadLink" ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)"
disabled="#{empty labNumbers.selectedExport}" actionListener="#{sampleExportController.generateSpreadSheet()}">
<p:graphicImage value="./resources/images/csv.png" alt="Download the report by lab Number as a CSV."/>
<p:fileDownload value="#{sampleExportController.file}"/>
</p:commandLink>
</p:column>
</p:row>
</p:panelGrid>
<p:dataTable id="nested" var="sampleheader" value="#{labNumbers.samples}" scrollable="true"
rowStyleClass="#{sampleheader.rowColorByType}" scrollHeight="150">
<p:column headerText="Container ID">
#{sampleheader.containerID}
</p:column>
<p:column headerText="Sample ID">
#{sampleheader.sampleID}
</p:column>
<p:column headerText="Field ID">
#{sampleheader.fieldID}
</p:column>
<p:column headerText="Grower">
#{sampleheader.grower}
</p:column>
<p:column headerText="Sample Type">
#{sampleheader.sampleType}
</p:column>
<p:column headerText="Notes">
#{sampleheader.note}
</p:column>
<p:column headerText="View Sample" style="width:8%">
<p:commandButton update=":viewerID" oncomplete="viewerDialog.show()" process="@this" styleClass="compress" icon="ui-icon-newwin">
<f:setPropertyActionListener value="#{sampleheader}" target="#{sampleExportController.selectedSample}" />
</p:commandButton>
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
</h:form>
<h:outputText value="Nice Try" rendered="#{sampleExportController.allowReading eq false}"/>
<h:form id="innerSearch"><p:dialog id="searchDialogID" widgetVar="searchDialog" header="Sample search" resizable="false" draggable="false" showEffect="puff"
hideEffect="puff" appendToBody="false" modal="true" rendered="#{sampleExportController.allowReading eq true}">
<h:panelGrid columns="4">
<h:outputText value="Starting Lab Number:"/>
<p:inputText value="#{sampleExportController.search.labnumberStart}" maxlength="20"/>
<h:outputText value="Ending Lab Number:"/>
<p:inputText value="#{sampleExportController.search.labnumberEnd}" maxlength="20"/>
<h:outputText value="Starting Container ID:"/>
<p:inputText value="#{sampleExportController.search.containerIDStart}" maxlength="11"/>
<h:outputText value="Ending Container ID:"/>
<p:inputText value="#{sampleExportController.search.containerIDEnd}" maxlength="11"/>
<h:outputText value="Season:"/>
<p:selectOneMenu value="#{sampleExportController.search.year}"
panelStyle="width:150px" effect="fade" var="p" style="width:160px"
filter="true" filterMatchMode="contains">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{sampleExportController.years}" var="year" itemLabel="#{year}" itemValue="#{year}"/>
</p:selectOneMenu>
</h:panelGrid>
<h:panelGrid columns="2">
<p:outputLabel for="acAg" value="Agronomist -- You may now search by any value"/>
<p:selectOneMenu id="acAg" value="#{sampleExportController.search.agronomist}" converter="agronomerSampleExportConverter"
panelStyle="width:170px" effect="fade" var="p" style="width:160px"
filter="true" filterMatchMode="contains" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{sampleExportController.agronomers}" var="agronomer" itemLabel="#{agronomer.lastName} #{agronomer.company} #{agronomer.firstName} #{agronomer.accountNumber}" itemValue="#{agronomer}"/>
<p:column >
Base Ac. #: #{p.account.accountNumber}<br/>
Company Name: #{p.company}<br/>First Name:#{p.firstName}<br/><strong>Last Name:#{p.lastName}</strong>
</p:column>
</p:selectOneMenu>
<h:outputText value="Sample Type:"/>
<p:selectOneMenu id="sampleType" value="#{sampleExportController.search.sampleType}" effect="fade" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{sampleExportController.sampleTypes}" var="stype" itemLabel="#{stype}" itemValue="#{stype}"/>
</p:selectOneMenu>
<p:outputLabel for="acGro" value="Grower"/>
<p:selectOneMenu id="acGro" value="#{sampleExportController.search.grower}"
panelStyle="width:150px" effect="fade" var="p" style="width:160px"
filter="true" filterMatchMode="contains" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{sampleExportController.growers}" var="grower" itemLabel="#{grower}" itemValue="#{grower}"/>
</p:selectOneMenu>
</h:panelGrid>
<p:commandButton update=":mainForm:DTsamplesVw" process="innerSearch" icon="ui-icon-search" value="Search" actionListener="#{sampleExportController.loadSearch}" oncomplete="searchDialog.hide()"/>
</p:dialog>
</h:form>
<p:dialog id="viewerID" widgetVar="viewerDialog" modal="true" dynamic="true" hideEffect="puff" showEffect="puff" appendToBody="false"
maximizable="true" header="Viewing selected samples" rendered="#{sampleExportController.allowReading eq true}">
<h:form id="innerView">
<h:panelGrid columns="2" width="100%">
<h:panelGrid>
<p:panelGrid >
<f:facet name="header">
<p:row>
<p:column colspan="1" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}">
CSV Single Sample Report
</p:column>
<p:column colspan="1" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}">
Single Sample Report Export
</p:column>
<p:column colspan="1">
Lab Number Report Export
</p:column>
</p:row>
</f:facet>
<p:row>
<p:column style="text-align: center;" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}">
<p:commandLink ajax="false" id="cOnecsv" onclick="PrimeFaces.monitorDownload(start, stop)" actionListener="#{sampleExportController.generateSingleSampleReportCSV}" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}">
<p:fileDownload value="#{sampleExportController.file}" />
<p:graphicImage value="./resources/images/csv.png" alt="Download the report by sample as a PDF."/>
</p:commandLink>
<p:tooltip for="cOnecsv" value="Download the report by sample as a CSV." showEffect="fade" hideEffect="fade" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}"/>
</p:column>
<p:column style="text-align: center;" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}">
<p:commandLink ajax="false" id="cOnePdf" onclick="PrimeFaces.monitorDownload(start, stop)" actionListener="#{sampleExportController.generateSingleSampleReportPDF}" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}">
<p:fileDownload value="#{sampleExportController.file}" />
<p:graphicImage value="./resources/images/pdf.png" alt="Download the report by sample as a PDF."/>
</p:commandLink>
<p:tooltip for="cOnePdf" value="Download the report by sample as a PDF." showEffect="fade" hideEffect="fade" rendered="#{sampleExportController.selectedSample.sampleType eq 'Soil'}"/>
</p:column>
<p:column style="text-align: center;">
<p:commandLink ajax="false" id="cMultiPdf" onclick="PrimeFaces.monitorDownload(start, stop)" actionListener="#{sampleExportController.generateMultiSampleReportPDF}">
<p:fileDownload value="#{sampleExportController.file}" />
<p:graphicImage value="./resources/images/pdf.png" alt="Download the report by lab Number as a PDF."/>
</p:commandLink>
<p:tooltip for="cOnePdf" value="Download the report by lab Number as a PDF." showEffect="fade" hideEffect="fade" />
</p:column>
</p:row>
</p:panelGrid>
+ random ending tags
Upvotes: 4
Views: 25859
Reputation: 1221
The problem resides in your dialog. There's p:commandButton
that contains the following:
<p:commandButton update=":mainForm:DTsamplesVw" process="innerSearch"
icon="ui-icon-search" value="Search"
actionListener="#{sampleExportController.loadSearch}"
oncomplete="searchDialog.hide()"/>`
It should be update=":mainForm:DTsamples"
since you need to reference the id and not the widgetVar. Have a nice day!
Upvotes: 7