cancel
Showing results for 
Search instead for 
Did you mean: 

Cannot pass parameter in JSF

Former Member
0 Kudos

I am writing a JSF page to get user input, and pass that input to Crystal Report (Crystal Report for Eclipse 2.0). I don't know why the parameterFields cannot load my parameter. Please help me!!!

My First page (rptDemo.xhtml):

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  3. <html xmlns="http://www.w3.org/1999/xhtml" 
  4.     xmlns:h="http://java.sun.com/jsf/html" 
  5.     xmlns:f="http://java.sun.com/jsf/core"> 
  6. <h:head> 
  7.     <title>Crystal Report Demo</title> 
  8. </h:head> 
  9. <h:body> 
  10. <h1>Crystal Report for Eclipse 2.0 Demo</h1> 
  11. <h2>Using JSF 2.0 and JSF 1.2 to generate report</h2> 
  12. <h3>This input/select page use JSF 2.0, result page use JSF 1.2 </h3> 
  13.     <f:view> 
  14.         <h:form> 
  15.             <table border="1"> 
  16.                 <tr> 
  17.                     <td>No parameter passing to report</td> 
  18.                     <td colspan="2"><h:commandButton value="Show report 1" action="#{reportBean.show1}"/> can show report normally</td> 
  19.                 </tr> 
  20.                 <tr> 
  21.                     <td>Passing parameter to report<br/>(cannot pass parameter)</td> 
  22.                     <td><h:inputText value="#{reportBean.inputText}"/></td> 
  23.                     <td><h:commandButton value="Show report 2" action="#{reportBean.show2}"/></td> 
  24.                 </tr> 
  25.             </table> 
  26.         </h:form> 
  27.     </f:view> 
  28. </h:body> 
  29. </html> 

My second page (result page) for "Show Report 1 (rpt1.jsp)", this can run successfully:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 

<%@ taglib uri="http://www.businessobjects.com/jsf/crystalreportsviewers" prefix="bocrv" %> 

       

<head><title>View Report 1</title> 

</head> 

<body> 

<f:view> 

<h:form> 

<bocrv:reportPageViewer reportSource="#{reportBean.reportSource1}"  />  

</h:form> 

</f:view> 

<body> 

</html>

My third page (result page) for "Show Report 2 (rpt2.jsp)", this has error, parameterFields seem cannot load parameter:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 

<%@ taglib uri="http://www.businessobjects.com/jsf/crystalreportsviewers" prefix="bocrv" %> 

       

<head><title>View Report 2</title> 

</head> 

<body> 

<f:view> 

<h:form> 

<bocrv:reportPageViewer reportSource="#{reportBean.reportSource2}" allowParameterPrompting="false"  parameterFields="#{reportBean.parameterFields}" />  

</h:form> 

</f:view> 

<body> 

</html>

My report bean is:

  1. package crDemo; 
  2.  
  3. import javax.faces.bean.ManagedBean; 
  4.  
  5. import com.crystaldecisions.reports.reportengineinterface.JPEReportSourceFactory; 
  6. import com.crystaldecisions.sdk.occa.report.data.Fields; 
  7. import com.crystaldecisions.sdk.occa.report.data.ParameterField; 
  8. import com.crystaldecisions.sdk.occa.report.data.ParameterFieldDiscreteValue; 
  9. import com.crystaldecisions.sdk.occa.report.data.Values; 
  10. import com.crystaldecisions.sdk.occa.report.lib.ReportSDKException; 
  11. import com.crystaldecisions.sdk.occa.report.reportsource.IReportSourceFactory2; 
  12.  
  13. @ManagedBean 
  14. public class ReportBean { 
  15.     private Object reportSource1 = null
  16.     private Object reportSource2 = null
  17.     private String inputText = ""
  18.     private Fields<ParameterField> parameterFields = new Fields<ParameterField>(); 
  19.      
  20.     public Object getReportSource1() { 
  21.         return reportSource1; 
  22.     } 
  23.     public void setReportSource1(Object reportSource1) { 
  24.         this.reportSource1 = reportSource1; 
  25.     } 
  26.     public Object getReportSource2() { 
  27.         return reportSource2; 
  28.     } 
  29.     public void setReportSource2(Object reportSource2) { 
  30.         this.reportSource2 = reportSource2; 
  31.     } 
  32.     public String getInputText() { 
  33.         return inputText; 
  34.     } 
  35.     public void setInputText(String inputText) { 
  36.         this.inputText = inputText; 
  37.     } 
  38.     public Fields<ParameterField> getParameterFields() { 
  39.         return parameterFields; 
  40.     } 
  41.     public void setParameterFields(Fields<ParameterField> parameterFields) { 
  42.         this.parameterFields = parameterFields; 
  43.     } 
  44.      
  45.     public String show1() { 
  46.         try { 
  47.         // Instantiate the report object 
  48.         String reportLocation; 
  49.         reportLocation = "rpt/demo1.rpt"; 
  50.         IReportSourceFactory2 rptSrcFactory = new JPEReportSourceFactory(); 
  51.          
  52.             reportSource1 = rptSrcFactory.createReportSource(reportLocation, java.util.Locale.getDefault() ); 
  53.         } catch (ReportSDKException e) { 
  54.             // TODO Auto-generated catch block 
  55.             e.printStackTrace(); 
  56.         } 
  57.         return "rpt1"
  58.     } 
  59.      
  60.     public String show2() { 
  61.         try { 
  62.         // Instantiate the report object 
  63.         String reportLocation; 
  64.         reportLocation = "rpt/demo2.rpt"; 
  65.         IReportSourceFactory2 rptSrcFactory = new JPEReportSourceFactory(); 
  66.         reportSource2 = rptSrcFactory.createReportSource(reportLocation, java.util.Locale.getDefault() ); 
  67.          
  68.         // Clear previous parameter 
  69.         parameterFields.clear(); 
  70.  
  71.         //Create a ParameterField object for each field that you wish to set. 
  72.         ParameterField paramFieldOne = new ParameterField(); 
  73.  
  74.         //You must set the report name. Set the report name to an empty string if your report does not contain a subreport; otherwise, the report name will be the name of the subreport 
  75.         paramFieldOne.setReportName(""); 
  76.  
  77.         //Create a Values object and a ParameterFieldDiscreteValue object for each parameter field you wish to set. 
  78.         //If a ranged value is being set, a ParameterFieldRangeValue object should be used instead of the discrete value object. 
  79.         Values valueOne = new Values(); 
  80.         ParameterFieldDiscreteValue paramFieldDVOne = new ParameterFieldDiscreteValue(); 
  81.  
  82.         //----------- Initialize the parameter fields ---------- 
  83.  
  84.         //Set the name and value for each parameter field that is added. 
  85.         //Values for parameter fields are represented by a ParameterFieldDiscreteValue or ParameterFieldRangeValue object. 
  86.         System.out.println("Input parameter = " + inputText); 
  87.         paramFieldOne.setName("paramOne");  // "paramOne" is parameter name in my Crystal Report file (demo2.rpt) 
  88.         paramFieldDVOne.setValue(inputText); 
  89.  
  90.         //Add the parameter field values to the Values collection object. 
  91.         valueOne.add(paramFieldDVOne); 
  92.  
  93.         //Set the current Values collection for each parameter field. 
  94.         paramFieldOne.setCurrentValues(valueOne); 
  95.  
  96.         //Add each parameter field to the Fields collection. 
  97.         //The Fields object is now ready to be used with the viewer. 
  98.         parameterFields.add(paramFieldOne); 
  99.  
  100.         } catch (ReportSDKException e) { 
  101.             // TODO Auto-generated catch block 
  102.             e.printStackTrace(); 
  103.         } 
  104.         return "rpt2"
  105.     } 

Here is runtime result:

https://public.bay.livefilestore.com/y1pigYkVz4Js_QEKhde3sLBYPuh4V2iGWCboJG3omrD6w5vwl1gOWhiMpfMcPFMzfENu7tLBpK-m1wwWb0mTYv7sg/run.png?psid=1

After enter some value, and click "Show report 2"

https://public.bay.livefilestore.com/y1pHsxtGjMgSla_sZlihB6Y7xB6kOyhcOMSwND5xgin5qV1sGw85K_SBJUFJUGt_OlOm7F2fwZ1FO_qVA25cxpmFA/Missing.png?psid=1

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Dear all,

My complete source code and eclipse workspace can be download at:

http://dl.dropbox.com/u/43307712/crDemo_workspace.7z

Anyone know how to passing parameter?

Thank you

Kevin