Discussions

General J2EE: How to pass a server side value to an attribute of a custom jsp

  1. Hi All: I needed to passed an integer value from the following code: <%=ic.getTotalNumOfRecords()%> to an attribute of a custom tag The function getTotalNumOfRecords returns an int. The attribute numberOfRecords expects an string. Here are the different ways I tried in a jsp page but I get also the following errors: 1.) [QUOTE] <%@ include file="../common/page_imports.jsp" %> dataAction="claimHistoryViewData.do" emptyKey="error.noData"/> [/QUOTE] Error Message: claimHistoryView.jsp:190:3: Unterminated tag. dataAction="claimHistoryViewData.do" emptyKey="error.noData"/> 2.) [QUOTE] <%@ include file="../common/page_imports.jsp" %> [/QUOTE] Error Message: claimHistoryView.jsp:190:4: The required attribute "numberOfRecords" is missing. 3.) [QUOTE] <%@ include file="../common/page_imports.jsp" %> [/QUOTE] Error Message: java.lang.NumberFormatException: For input string: "<%ic.getTotalNumOfRecords();%>" 4.) [QUOTE] <%@ include file="../common/page_imports.jsp" %> <% int records1 = ic.getTotalNumOfRecords(); Integer records2 = new Integer(records1); String numberOfRecords2 = records2.toString(); %> [/QUOTE] error message: java.lang.NumberFormatException: For input string: "<%numberOfRecords2;%>" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224) at java.lang.Double.valueOf(Double.java:447) at java.lang.Double.(Double.java:539) at com.DisplayTableClaimHistoryTag.displayTable(DisplayTableClaimHistoryTag.java:63) 5.) [QUOTE] <% int records1 = ic.getTotalNumOfRecords(); Integer records2 = new Integer(records1); String numberOfRecords2 = records2.toString(); %> dataAction="claimHistoryViewData.do" emptyKey="error.noData"/> [/QUOTE] error message: claimHistoryView.jsp:194:3: Unterminated tag. dataAction="claimHistoryViewData.do" emptyKey="error.noData"/> In the custom tag java code called "DisplayTableClaimHistoryTag" I tried to used the following code: [QUOTE] InquiryContext ic = InquiryContext.getContext(session); [/QUOTE] The problem is that in order to get session I needed HttpSession object. I don't know how to passed HttpSession "session" object to a custom tag. Is there a way to do this? [QUOTE] public class DisplayTableClaimHistoryTag extends InquiryTag { String numberOfRecords; public void setNumberOfRecords(String numberOfRecords) { this.numberOfRecords = numberOfRecords; } public String getNumberOfRecords() { return numberOfRecords; } public int doStartTag()throws JspException { InquiryContext context = (InquiryContext)pageContext.getSession().getAttribute(Constrain.CONTEXT); if(context==null) throw new JspException(TAG_EXCEPTION+ "InquriyContext is null."); String hasData = (String)context.getAttribute(Constrain.CONTROL_HAS_DATA); if(hasData==null) throw new JspException(TAG_EXCEPTION + "The hasData property can not be null."); boolean hd = Boolean.valueOf(hasData).booleanValue(); Debug.println("hasData="+hd); Debug.println("hasDataString="+hasData); if(hd) displayTable(); else disPlayError(); return SKIP_BODY; } private void displayTable() throws JspException { String outString =""; Debug.println("dispalyTable() ********* dataAction="+ dataAction); JspWriter out = pageContext.getOut(); /* * Minimum height height= 103,70 * 21.7 per row * First row==103+21.5=124.5 * Second row ==103+21.5*2=146 * Third row ==103+21.5*3=167.5 */ Double numberOfRecordsBigDouble = new Double(numberOfRecords); double numberOfRecordsDouble = 70 + 21.8*numberOfRecordsBigDouble.intValue(); if(order==null || order.equals("0")) // outString = "<iframe src="\""" +="" "="" nquiry="" dataaction="" "?order="0"+" "\""="" name="\"dataFrame\"" id="\"dataFrame\"" height="\""+numberOfRecordsDouble+"\""" +"="" width="\"100%\"" scrolling="\"NO\"" frameborder="\"0\"">"; // outString = "<iframe src="\""" +="" "="" nquiry="" dataaction="" "?order="0"+" "\""="" name="\"dataFrame\"" id="\"dataFrame\"" style="\"height:"+numberOfRecordsDouble+"px;" width:100%\"="" scrolling="\"NO\"" frameborder="\"0\"">"; // outString = "<iframe src="\""" +="" "http:="" www.google.ca"+="" "\""="" "="" name="\"dataFrame\"" id="\"dataFrame\"" style="\"height:"+numberOfRecordsDouble+"px;" width:100%\"="" scrolling="\"NO\"" frameborder="\"0\"">"; outString = "<iframe src="\""" +="" "="" nquiry="" dataaction="" "?order="0"+" "\""="" name="\"dataFrame\"" id="\"dataFrame\"" style="\"height:"+numberOfRecordsDouble+"px;" width:100%\"="" scrolling="\"NO\"" frameborder="\"0\"">"; else { String orderStr = "?order=" + order; outString = "<iframe src="\""" +="" "="" nquiry="" dataaction="" orderstr="" "\""="" name="\"dataFrame\"" id="\"dataFrame\"" height="\""+numberOfRecordsDouble+"\""" +"="" width="\"100%\"" scrolling="\"NO\"" frameborder="\"0\"">"; //outString = "<iframe src="\""" +="" "="" nquiry="" dataaction="" orderstr="" "\""="" name="\"dataFrame\"" id="\"dataFrame\"" height="\"161\"" width="\"100%\"" scrolling="\"NO\"" frameborder="\"0\"">"; } Debug.println("dispalyTable() ********* outString = "+ outString); try { out.println(outString); } catch (IOException e) { this.log.error(TAG_EXCEPTION + e.toString(), e); throw new JspException(e); } } [/QUOTE] Any hint would be greated appreciated. Yours, Frustrated
  2. Dear Mr. Frustated John :), You gave a very good explanation of your problem. You can use any of the scopes (page,request,session, application) to pass the data from the JSP to the TagLib. To do that.. Step 1) Store the value in the scope.
    Step 2) Retrieve this value in the CustomTag Class
    public int doStartTag()throws JspException { Integer noOfRec = (Integer) pageContext.getRequest().getAttribute("numOfRec"); boolean hasData = noOfRec.intValue() > 0; if(hd) displayTable(); else disPlayError(); }
    regards, Krishna Pothula