Link to home
Start Free TrialLog in
Avatar of jaggernat
jaggernat

asked on

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
Avatar of fargo
fargo

you have to iterate over the string array.

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

fargo
Avatar of jaggernat

ASKER

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"
SOLUTION
Avatar of fargo
fargo

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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
strange

try casting it and getting the length

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

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

fargo

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


Avatar of CEHJ
>>
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)
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
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
no i dont see the toString() for Arrays

Well that's not essential - you can iterate. It's your setter you need to be concerned about
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
>>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
ok   so using this reference can i access the string arrayobject  or the string elements

thanks
Not if the length is zero ;-)
oh man...u funny
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

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
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
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Where do you set lrnCount?  Or should you be getting it from the request, something like:

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

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

What's it's value?
What's its value i mean ;-)
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.
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?



 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
>>would show

I need to know what it *does* show - not *would* show ;-)
sorry i meant "DOES" and not "would"
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()));
       
                 
       }



}

>>IncidentsVO incidentVO = new IncidentsVO();

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

Can you post the code for the above?
checj that buildFormBeanFromIncidentsVO is getting called
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

:-)
no worries :)