reading elements from string array

Dear experts

I have this little peice of code on which i want clarification



bean  contains a field  
private String[] allLRNs = new String[0]; and valueobject also contains the same field
private String[] allLRNs = new String[0];

I am setting values in the string array(in bean)  and setting it to value object.

Later on i want to get the array values from the valueobject and set it to bean by doing this

bean.setAllLRNs(incidentNotificationVALUEOBJ.getAllLRNs());
System.out.println("IDEN VALUE" +incidentNotificationVO.getAllLRNs());

BUT incidentNotificationVO.getAllLRNs()  prints/gives me the Array object. HOW do i get to see the
individual string elements in it?

thanks
J
LVL 10
jaggernatAsked:
Who is Participating?
 
CEHJCommented:
>>FWhen populating the array check the value of lrnCount

Already mentioned
0
 
fargoCommented:
you have to iterate over the string array.

for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  ){
System.out.println(incidentNotificationVO.getAllLRNs()[i]);
}

fargo
0
 
jaggernatAuthor Commented:
thanks for the response

I am not sure why its not going through the loop

i gave like this

for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  )
        {
           System.out.println("IDEN VALUE"+incidentNotificationVO.getAllLRNs()[i]);
         }

        System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());

its printing "IDEN ArrayObjectVALUE"  but not   "IDEN VALUE"
0
Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

 
fargoCommented:
Hi,

It means the incidentNotificationVO.getAllLRNs().length is 0.
you have no elements in the array.

print out
System.out.println(incidentNotificationVO.getAllLRNs().length);

fargo
0
 
jaggernatAuthor Commented:
oh yea,,u are damn right..arraylength is 0.

but this is extremely confusing .

when i give
System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());

incidentNotificationVO.getAllLRNs() returns a String[] object  (some garbage characters)

so how come length of String[] is zero ?

thanks
0
 
fargoCommented:
strange

try casting it and getting the length

((String[]) incidentNotificationVO.getAllLRNs()).length

fargo
0
 
jaggernatAuthor Commented:
still shows zero
0
 
fargoCommented:
Then you need to check the population of this array. This bean property is not getting set.

fargo

0
 
jaggernatAuthor Commented:
i checked the bean , its getting set since this works perfectly
for(int i=0;i <bean.getAllLRNs().length;i++  )
        {
           System.out.println("IDEN VALUE"+bean.getAllLRNs()[i]);
         }


setting from bean to value object is also fine since
for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  )
        {
           System.out.println("IDEN VALUE"+incidentNotificationVO.getAllLRNs()[i]);
         }

works perfectly

BUT when i retrieve from the ValueObject it says array length is zero


0
 
CEHJCommented:
>>
when i give
System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());

incidentNotificationVO.getAllLRNs() returns a String[] object  (some garbage characters)
>>

That will print the array reference (empty or not)
0
 
jaggernatAuthor Commented:
hi cehj,

sorry, could not understand your question

 incidentNotificationVO.getAllLRNs() returns a String[] and prints some garbage on the console . i am assuming its the string[] object.
i want the individual string elements

thanks
0
 
CEHJCommented:
If you're using 1.5 you can do


System.out.println(Arrays.toString(incidentNotificationVO.getAllLRNs()));

but you need to check your setter is being called and that it's setting the property
0
 
jaggernatAuthor Commented:
no i dont see the toString() for Arrays

0
 
CEHJCommented:
Well that's not essential - you can iterate. It's your setter you need to be concerned about
0
 
jaggernatAuthor Commented:
ok .what  i dont understand is        incidentNotificationVO.getAllLRNs()   prints some garbage on the console, then

why does System.out.println("array length" +incidentNotificationVO.getAllLRNs()).length ) or
System.out.println ((String[]) incidentNotificationVO.getAllLRNs()).length)  show  zero
0
 
CEHJCommented:
>>ok .what  i dont understand is        incidentNotificationVO.getAllLRNs()   prints some garbage on the console

As i mentioned above, it will print the array reference irrespective of length
0
 
jaggernatAuthor Commented:
ok   so using this reference can i access the string arrayobject  or the string elements

thanks
0
 
CEHJCommented:
Not if the length is zero ;-)
0
 
jaggernatAuthor Commented:
oh man...u funny
0
 
jaggernatAuthor Commented:
problem description in detail

step 1 :: Building VO from formbean

 private IncidentsVO buildVOFromFormBean(ActionForm actionForm,
                                            HttpServletRequest req, String fromWhere) {

        IncidentsFormBean formBn = (IncidentsFormBean) actionForm;
        IncidentsVO incidentVO = new IncidentsVO();
String[] lrns = new String[lrnCount];
for (int i = 0; i < lrnCount; i++) {
                lrns[i] = req.getParameter("allLRNs" + i);
                  }

formBn.setAllLRNs(lrns); //constructed formbean

//setting VO from the constructed form bean
incidentNotificationVO.setAllLRNs(formBn.getAllLRNs());  

}

//next method..

Step 2:: building formbean from VO (just the reverse)

private void buildFormBeanFromIncidentsVO(IncidentsFormBean bn,
                                              IncidentsVO incidentsVO,
                                              HttpServletRequest req) throws
            DAOException {
             IncidentTypeVO incidentTypeVO = incidentsVO.getIncidentTypeVO();
 bn.setAllLRNs(incidentNotificationVO.getAllLRNs());
System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());   //shows array reference but i want the actual array and elements
}


any help would be greatly appreciated,
thanks

0
 
CEHJCommented:
Make sure lrnCount > 0

>>//shows array reference but i want the actual array and elements

As has been said before, you iterate it and print it, if there's anything to iterate
0
 
objectsCommented:
The following will display the contents of your array (on any version of java):

System.out.println("IDEN ArrayObjectVALUE" +Arrays.asList(incidentNotificationVO.getAllLRNs()));

FWhen populating the array check the value of lrnCount
0
 
objectsCommented:
try adding the following:

private IncidentsVO buildVOFromFormBean(ActionForm actionForm,
                                            HttpServletRequest req, String fromWhere) {

        IncidentsFormBean formBn = (IncidentsFormBean) actionForm;
        IncidentsVO incidentVO = new IncidentsVO();
        System.out.println("Adding "+lrnCount+" elements");
        String[] lrns = new String[lrnCount];
        for (int i = 0; i < lrnCount; i++) {
                lrns[i] = req.getParameter("allLRNs" + i);
                System.out.println(i+":"+lrns[i]);
        }
        ......

That will show you in the log whats getting read.
0
 
objectsCommented:
Where do you set lrnCount?  Or should you be getting it from the request, something like:

lrnCount = Integer.parseInt(request.getParameter("lrnCount"));
0
 
jaggernatAuthor Commented:
>>>>should you be getting it from the request

yes exactly, its coming from the request. and "lrnCount" works  perfect.

0
 
CEHJCommented:
What's it's value?
0
 
CEHJCommented:
What's its value i mean ;-)
0
 
jaggernatAuthor Commented:
i am setting lrnCount in the jsp page and in my action class i am doing
int lrnCount = 0;
            if (req.getParameter("lrnCount") != null &&
                req.getParameter("lrnCount") != "") {
                lrnCount = Integer.parseInt(req.getParameter("lrnCount"));
                System.out.println("Adding "+lrnCount+" elements");

           
            }

so lrncount is either 2 if i enter 2 records or 3 if i enter 3 records.
0
 
CEHJCommented:
Let's take it step by step:

int lrnCount = 0;
String sLrnCount = req.getParameter("lrnCount");
if (sLrnCount != null && (sLrnCount = sLrnCount.trim()).length() > 0) {
      lrnCount = Integer.parseInt(sLrnCount);
      System.out.println("Adding "+lrnCount+" elements");
}

.........

for (int i = 0; i < lrnCount; i++) {
      lrns[i] = req.getParameter("allLRNs" + i);
      System.out.println("lrns[" + i + "]=" + lrns[i]);
}

Can you tell us what the above prints?
0
 
jaggernatAuthor Commented:



 if aaaaaaaaa is entered in the field value of lrns on browser

System.out.println("lrns[" + i + "]=" + lrns[i]);  would show
lrns[0]=aaaaaaaaa

and System.out.println("value of LRNS[i]" +req.getParameter("allLRNs" + i));
shows aaaaaaaaa
0
 
CEHJCommented:
>>would show

I need to know what it *does* show - not *would* show ;-)
0
 
jaggernatAuthor Commented:
sorry i meant "DOES" and not "would"
0
 
jaggernatAuthor Commented:
this is fine :
step 1
private IncidentsVO buildVOFromFormBean(ActionForm actionForm,
                                            HttpServletRequest req, String fromWhere) {

        IncidentsFormBean formBn = (IncidentsFormBean) actionForm;
        IncidentsVO incidentVO = new IncidentsVO();
String[] lrns = new String[lrnCount];
for (int i = 0; i < lrnCount; i++) {
                lrns[i] = req.getParameter("allLRNs" + i);
                  }

formBn.setAllLRNs(lrns); //constructed formbean

//setting VO from the constructed form bean
incidentNotificationVO.setAllLRNs(formBn.getAllLRNs());  

}


THE PROBLEM IS WITH STEP 2
Step 2:: building formbean from VO (just the reverse)

private void buildFormBeanFromIncidentsVO(IncidentsFormBean bn,
                                              IncidentsVO incidentsVO,
                                              HttpServletRequest req) throws
            DAOException {
             IncidentTypeVO incidentTypeVO = incidentsVO.getIncidentTypeVO();
 bn.setAllLRNs(incidentNotificationVO.getAllLRNs());

for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  ) //this is not getting executed at all
        {
                    System.out.println("IDEN22 VALUE"+Arrays.asList(incidentNotificationVO.getAllLRNs()));
       
                 
       }



}

0
 
CEHJCommented:
>>IncidentsVO incidentVO = new IncidentsVO();

Nothing happens to that as far as i can see
0
 
jaggernatAuthor Commented:
do u think its the problem when the data comes back from database to incidentNotificationVO
0
 
CEHJCommented:
>>formBn.setAllLRNs(lrns);

Can you post the code for the above?
0
 
objectsCommented:
checj that buildFormBeanFromIncidentsVO is getting called
0
 
jaggernatAuthor Commented:
its working now guys . I realized there was some problem with the data when it was returning back from database.

thanks very much, i greatly appreciate it.

J

0
 
CEHJCommented:
:-)
0
 
objectsCommented:
no worries :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.