myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mjovanov <mihajlo.jovano...@jpmchase.com>
Subject Re: Implementing Printable View for dataTable: Problem with target="_blank"?
Date Thu, 14 Sep 2006 20:13:30 GMT

Sorry, my last attempt to reply didn't come out right; just wanted to thank
you for the tip, I ended up using media-specific css classes to solve my
problem.  I would like to eventually figure out what was wrong with my
initial approach, as I can conceive situations where I will need to open new
windows and access serialized backing beans from them, but I guess getting
to that point with JSF/MyFaces takes time...

Thanks again for taking the time to respond.


Paul Spencer-3 wrote:
> 
> Mjovanov,
> I just have time for short answers.  You will need to do the research.
> 
> 1) Media specific CSS Classes may be the answer.  This way the user 
> prints from the browser without the need of a "Printable Format" page.
> 
> 2) Shale Dialogs.  http://shale.apache.org.
> 
> 
> Paul Spencer
> 
> 
> 
> mjovanov wrote:
>> Hello,
>> 
>> Please consider the following scenario: a page with a dataTable component
>> and a backing bean with two DataModel properties, one for the rows
>> (binding
>> to the 'value' attribute of the dataTable) and one for columns (binding
>> to
>> the 'value' attribute of the nested t:columns tag).  The backing bean is
>> configured in faces-config.xml to 'request' scope, but is being
>> serialized
>> between requests by using the t:saveState tag (so that paging for example
>> would not require additional hits to the database).  So far everything is
>> working as expected.  However, problems arise when I try to implement a
>> link
>> on the page that allows a user to open the table in a new window, and
>> without paging (for printing purposes).  The catch is that I want to be
>> able
>> to still use the same backing bean so that the data doesn’t have to be
>> retrieved again, and also so that the sort would be preserved.  Could
>> anyone
>> suggest the approach to take?  I tried the following:
>> 
>> Define a commandLink component and bind it to an action method on the
>> backing bean, like this:
>> 
>>     <h:outputLink value="searchView.faces" target="_blank"
>> class="linkCaption" rendered="#{workbenchForm.dataFound}">
>>         <t:graphicImage url="images/printer_icon.gif"
>> alt="#{msg.labelPrintQueueSumm}" width="21" height="14" /> 
>>         <h:outputText value="#{msg.labelPrintQueueSumm}"/>
>>     </h:outputLink><br/>
>> 
>> The body of the action method would then look like something like this:
>> 
>>   public void forwardToPrintView() throws IOException, ServletException {
>>       HttpServletRequest request = (HttpServletRequest)getRequest();
>>       HttpServletResponse response = (HttpServletResponse)getResponse();
>>       request.setAttribute("rows", rows.getWrappedData());
>>       request.setAttribute("columns", columns.getWrappedData());
>>      
>> request.getRequestDispatcher("/workbenchPrint.faces").forward(request,
>> response);
>>       getFacesContext().responseComplete();        
>>   }
>> 
>> However this only works one time; after that I start seeing some really
>> weird behavior, like all links on the original page that were previously
>> working correctly start opening content in a new window?!  At first I
>> though
>> there may be a problem with the target=”_blank” attribute, but when I
>> switched the commandLink component to an outputLink and had it point to
>> another page all together (without accessing the serialized backing bean)
>> the problem went away; could it be that the JSF state some how got
>> corrupted?  Any suggestions/clues would be greatly appreciated.
>> 
>> PS  I was able to get very similar functionality to work for "Exporting
>> to
>> Excel"; the action method for this looks like this:
>> 
>>   public void exportHtmlTableToExcel() throws IOException{
>> 
>>       /*Set the filename
>>       DateTime dt = new DateTime();
>>       DateTimeFormatter fmt =
>> DateTimeFormat.forPattern("yyyy-MM-dd_HHmmss");
>>       String filename = dt.toString(fmt) + ".xls";*/
>>     
>>       //Setup the output
>>       String contentType = "application/vnd.ms-excel";
>>       FacesContext fc = FacesContext.getCurrentInstance();
>>       String filename =
>> fc.getExternalContext().getUserPrincipal().getName()
>> + "-"+ System.currentTimeMillis() + ".xls";
>>       HttpServletResponse response =
>> (HttpServletResponse)fc.getExternalContext().getResponse();
>>       response.setHeader("Content-disposition", "attachment; filename=" +
>> filename);
>>       response.setContentType(contentType);
>>     
>>       //Write the table back out
>>       PrintWriter out = response.getWriter();
>>       //First write column headings
>>       List columnList = (List)columns.getWrappedData();
>>       for (Iterator it = columnList.iterator(); it.hasNext(); ) {
>>           out.print(((TableColumnDTO)it.next()).getLabel() + "\t");
>>       }
>>       out.println();
>>       List data = (List)rows.getWrappedData();
>>       for (Iterator i = data.iterator(); i.hasNext(); ) {
>>           List row = (List)i.next();
>>           for (Iterator j = row.iterator(); j.hasNext(); ) {
>>               Object value = j.next();
>>               out.print((value != null ? value : "") + "\t");
>>           }
>>           out.println();
>>       }
>>       out.close();
>>       fc.responseComplete();
>>   }
>> 
>> One important difference to note is that the link for "Exporting to
>> Excel"
>> does not have the target attribute set to '_blank' (since the content
>> type
>> would force another application to handle it, thus opening it in a new
>> window automatically).
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Implementing-Printable-View-for-dataTable%3A-Problem-with-target%3D%22_blank%22--tf2265822.html#a6313789
Sent from the MyFaces - Users forum at Nabble.com.


Mime
View raw message