Note that there are some explanatory texts on larger screens.

plurals
  1. POp:dataTable and p:commandLink not working
    text
    copied!<p>I have the following:</p> <pre><code>&lt;p:dataTable id="photoPreview" var="file" value="#{ fileUploadMB.filesList }"&gt; &lt;p:column&gt; &lt;p:commandLink ajax="false"&gt; &lt;p:graphicImage value="#{ fileUploadMB.streamedContentFromFile }" rendered="#{ file.fileIsImage }"&gt; &lt;f:param name="N" value="#{ file.N() }" /&gt; &lt;f:param name="size" value="thumbnail" /&gt; &lt;/p:graphicImage&gt; &lt;p:fileDownload value="#{ fileUploadMB.streamedContentFromFile }"/&gt; &lt;f:param name="N" value="#{ file.N() }" /&gt; &lt;/p:commandLink&gt; &lt;/p:column&gt; &lt;p:column&gt; &lt;p:commandLink value="Remove" disabled="#{ loginMB.customerRole and !orderDetailMB.fileModificationPermitted }" action="#{ fileUploadMB.removeUploadedFile }" rendered="#{ file.uploadedFilePresent }" update="photoPreview"&gt; &lt;f:param name="N" value="#{ file.N() }" /&gt; &lt;/p:commandLink&gt; &lt;/p:column&gt; &lt;/p:dataTable&gt; </code></pre> <p>But when I click on the Remove link, the dataTable is not updated. I know that fileUploadMB.removeUploadedFile() is being called. I know that file.isFileIsImage() is being called after it. But nothing changes in the browser. Firebug's Net tab shows me that the response contains nothing useful, but that not might be reliable; Firebug has a tendency to refetch URLs when you look at response sub-tab.</p> <p>Relevant code for FileUploadMB :</p> <pre><code>@ManagedBean @SessionScoped public class FileUploadMB implements Serializable { private static final Logger logger = LoggerFactory.getLogger(Thread.currentThread().getStackTrace()[1].getClassName()); private Map&lt;Integer, OrderCustomerFile&gt; uploadedFilesList; private List&lt;OrderCustomerFile&gt; uploadedFilesToDelete; private static final int MAX_NUMBER_OF_FILES = 5; private List&lt;FileN&gt; filesList; // ---------------------------------------------------- public boolean fileIsImage(int rowIndex) { if( rowIndex == 0 ) { logger.debug( "rowIndex={}", rowIndex ); logger.debug( "uploadedFileList={}", uploadedFilesList ); logger.debug( "uploadedFileList.keys={}", uploadedFilesList.keySet() ); } if( !uploadedFilesList.containsKey(rowIndex) ) { if( rowIndex == 0 ) logger.debug( "nope" ); return false; } String ct = uploadedFilesList.get(rowIndex).getContentType(); if (ct.contains("gif") || ct.contains("jpeg") || ct.contains("png") || ct.contains("jpe")) return true; else return false; } // ---------------------------------------------------- public void removeUploadedFile() { FacesContext context = FacesContext.getCurrentInstance(); logger.debug( "context={}", context ); String N = context.getExternalContext().getRequestParameterMap().get("N"); logger.debug( "N={}", N ); removeUploadedFile( Integer.valueOf( N ) ); } // ---------------------------------------------------- public void removeUploadedFile(int rowIndex) { logger.debug( "uploadedFileList={}", uploadedFilesList ); logger.debug( "uploadedFileList.keys={}", uploadedFilesList.keySet() ); logger.debug( "rowIndex={}", rowIndex ); if( uploadedFilesList.get(rowIndex).getUploadedFile() == null ) { logger.debug( "Wants to delete {}", uploadedFilesList.get(rowIndex).getFilePath() ); uploadedFilesToDelete.add( uploadedFilesList.get(rowIndex) ); } uploadedFilesList.remove( rowIndex ); logger.debug( "uploadedFileList={}", uploadedFilesList ); logger.debug( "uploadedFileList.keys={}", uploadedFilesList.keySet() ); } // ---------------------------------------------------- public List&lt;FileN&gt; getFilesList() { if( filesList == null ) buildFilesList(); //logger.debug( "filesList={}", filesList ); return filesList; } public void buildFilesList() { Map&lt;String,Object&gt; viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap(); filesList = new ArrayList&lt;FileN&gt; (); for( int q=0; q&lt;MAX_NUMBER_OF_FILES; q++ ) { FileN file = new FileN (this, q); filesList.add( file ); logger.debug( "file={} hashCode={}", file, file.hashCode() ); viewMap.put( String.valueOf( file.hashCode() ), file ); } } // ---------------------------------------------------- public StreamedContent getStreamedContentFromFile() { // See http://stackoverflow.com/questions/8207325/display-image-from-database-with-pgraphicimage/12452144#12452144 FacesContext context = FacesContext.getCurrentInstance(); if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { logger.debug( "RENDER_RESPONSE phase" ); // So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL. return new DefaultStreamedContent(); } String N = context.getExternalContext().getRequestParameterMap().get("N"); String size = context.getExternalContext().getRequestParameterMap().get("size"); logger.debug( "N={}, size={}", N, size ); return streamedContentFromFile( Integer.valueOf( N ), size ); } // ---------------------------------------------------- public StreamedContent streamedContentFromFile( int rowIndex ) { return streamedContentFromFile( rowIndex, "normal" ); } // ---------------------------------------------------- public StreamedContent streamedContentFromFile( int rowIndex, String size ) { logger.debug( "rowIndex={}", rowIndex ); //fichier provenant de la BD (ayant deja ete sauvegarde) if (uploadedFilesList.get(rowIndex).getFilePath() != null) { OrderCustomerFile iof = uploadedFilesList.get( rowIndex ); try { java.io.File file = new java.io.File( iof.getFilePath() ); if (file.exists()) { logger.debug( "Streaming file {} ct={}", iof.getFilePath(), iof.getContentType() ); BufferedInputStream bif = new BufferedInputStream( new FileInputStream( new java.io.File(iof.getFilePath()))); logger.debug( "bif={}", bif ); String name = iof.getFilenameOriginal(); if( name == null ) name = iof.getFilePath().substring(iof.getFilePath().lastIndexOf("/")+1); logger.debug( "name={}", name ); return new DefaultStreamedContent(bif, iof.getContentType(), name ); } } catch (FileNotFoundException e ) { logger.error( null, e ); MessagesMB.showErrorMessage(MessagesMB.ORDER_DETAILS_FILE_NOT_FOUND); } //fichier n'ayant pas encore ete sauvegarde dans la BD } else if (null != uploadedFilesList.get(rowIndex).getUploadedFile()) { try { OrderCustomerFile file = uploadedFilesList.get(rowIndex); return new DefaultStreamedContent( file.getUploadedFile().getInputstream(), file.getContentType(), file.getFilenameOriginal() ); } catch (IOException e ) { logger.error( null, e ); MessagesMB.showErrorMessage(MessagesMB.ERROR_GENERAL); } } return null; } // ---------------------------------------------------- public boolean uploadedFilePresent(int rowIndex) { return uploadedFilesList.containsKey(rowIndex); // &amp;&amp; !hasBeenPersisted( rowIndex ); } } </code></pre> <p>Relevant parts of FileN:</p> <pre><code>@ManagedBean @ViewScoped public class FileN implements Serializable { private static final Logger logger = LoggerFactory.getLogger(Thread.currentThread().getStackTrace()[1].getClassName()); private Integer N; private FileUploadMB fileUploadMB; // ---------------------------------------------------- /** Creates a new instance of File */ public FileN( FileUploadMB fileUploadMB, Integer N ) { this.N = N; this.fileUploadMB = fileUploadMB; logger.debug( "N={}", N ); } // ---------------------------------------------------- public int N () { return N.intValue(); } // ---------------------------------------------------- public String getN () { return N.toString(); } // ---------------------------------------------------- public boolean isFileIsImage () { if( N.equals( 0 ) ) logger.debug( "N={}", N ); return fileUploadMB.fileIsImage( N.intValue() ); } // ---------------------------------------------------- public boolean isUploadedFilePresent () { return fileUploadMB.uploadedFilePresent( N ); } } </code></pre> <p>(And yes, I probably have a lot of other problems, what with FileN not really being a View-scoped Bean.)</p> <p>Using JSF-2.1, Primefaces-3.0, Glassfish-3.1.2.2, jdk-1.7.0</p> <p>Firebug Net response is:</p> <pre><code>&lt;?xml version='1.0' encoding='UTF-8'?&gt; &lt;partial-response&gt;&lt;changes&gt;&lt;update id="j_idt86"&gt;&lt;![CDATA[&lt;div id="j_idt86" class="ui-messages ui-widget"&gt;&lt;/div&gt;]]&gt;&lt;/update&gt;&lt;update id="javax.faces.ViewState"&gt;&lt;![CDATA[3615293429385705722:7636138965730106845]]&gt;&lt;/update&gt;&lt;/changes&gt;&lt;/partial-response&gt; </code></pre> <p>HttpFox gives me the same thing:</p> <pre><code>&lt;partial-response&gt; &lt;changes&gt; &lt;update id="j_idt86"&gt; &lt;div id="j_idt86" class="ui-messages ui-widget"&gt;&lt;/div&gt; &lt;/update&gt; &lt;update id="javax.faces.ViewState"&gt;-2752869461800547313:-2875920138022122822&lt;/update&gt; &lt;/changes&gt; &lt;/partial-response&gt; </code></pre> <p>This is over https, so getting an tcpdump would be harder.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload