-1

I want to save data into master - details table.First portion is for master table and last portion is for details table.I have got java.lang.String cannot be cast to [Ljava.lang.String .How to recover from this problem.How to assign map.get("step_id[]") into a string array String[] WfIds. I want to assign each value into distinct string array.

Controller Code

 Map<String,Object> wfManager = new HashMap<String,Object>();

//************************Master data sent from view******************************//

   wfManager.put("workflow_code",(request.getParameter("workflow_code")).toUpperCase());
   wfManager.put("workflow_name",request.getParameter("workflow_name"));
   wfManager.put("workflow_descr",request.getParameter("workflow_descr"));
   wfManager.put("object_type_code",request.getParameter("object_type_code"));

//*********************Detail item data sent from view********************************//

    wfManager.put("wf_block_id[]",              request.getParameter("wf_block_id[]"));
    wfManager.put("step_code[]" ,               request.getParameter("step_code[]"));
    wfManager.put("step_name[]",                request.getParameter("step_name[]"));
    wfManager.put("doa_type_code[]",            request.getParameter("doa_type_code[]"));
    wfManager.put("doa_type_name[]",            request.getParameter("doa_type_name[]"));

Service Code

public Map<String, String> insert(Map<String, Object> map) {

//************************Master data sent from view******************************//

Map<String, String> data = new HashMap<String, String>();
    Workflow wf = new Workflow();

    wf.setWorkflowCode((String)map.get("workflow_code"));
    wf.setWorkflowName((String)map.get("workflow_name"));
    wf.setWorkflowDescr((String)map.get("workflow_descr"));
    wf.setObjectTypeCode((String)map.get("object_type_code"));

        String[] WfIds                  = (String[]) map.get("step_id[]");
        String[] wfBlockIds             = (String[]) map.get("wf_block_id[]");
        String[] wfsCodes               = (String[]) map.get("step_code[]");
        String[] stepNames              = (String[]) map.get("step_name[]");
        String[] doaTypeCodes           = (String[]) map.get("doa_type_code[]");
        String[] doaTypeNames           = (String[]) map.get("doa_type_name[]");


List<WorkflowDetails> wfDetailsList = new ArrayList<WorkflowDetails>();


for(int i = 0; i< wfsCodes.length; i++){
            WorkflowDetails wfDetails = new WorkflowDetails();

        wfDetails.setWorkflowCode(wf.getWorkflowCode());
        wfDetails.setWorkflowName(wf.getWorkflowName());
        wfDetails.setWorkflowDescr(wf.getWorkflowDescr());
        wfDetails.setWorkflowObjectTypeCode(wf.getObjectTypeCode());
        wfDetails.setWorkflowObjectTypeName(wf.getObjectTypeName());
       wfDetailsList.add(i,wfDetails);  
        }

        wf.setSteps(wfDetailsList);

        id = workflowManagerDAO.insertDoc(wf);
         data.put("id", id);


  return data;

} Code for DAO:

    @Transactional
@Override
public String insertDoc(Workflow wfManager) {
    for(int i = 0; i < wfManager.getSteps().size(); i++){
        WorkflowDetails wfDetails = new WorkflowDetails();
        wfDetails = wfManager.getSteps().get(i);
        sessionfactory.getCurrentSession().save(wfDetails);
        sessionfactory.getCurrentSession().flush();
    }
    String id = (String) sessionfactory.getCurrentSession().save(wfManager);
    sessionfactory.getCurrentSession().flush();
    return id;
}
M.Topa
  • 64
  • 1
  • 10
  • `map.get("step_id[]");` is probably not a `String[]` (or anything else in its type heirarchy). Thus, you cannot cast to it from there. Refer to http://stackoverflow.com/questions/5289393/casting-variables-in-java – ifly6 Jul 26 '16 at 07:43
  • In my problem step_id[] is a String[] and it is now value of a map.I want to get it and assign it into a String[] stepIds. – M.Topa Jul 26 '16 at 07:47
  • Give me the full error code. Because `java.lang.String cannot be cast to [Ljava.lang.String` is impossible. – ifly6 Jul 26 '16 at 07:48
  • Oh, I misinterpreted. However it is, you cannot cast a `String` to a `String[]`, which is your problem. One of the datatypes is a `String` and you cannot simply treat it as if it were a `String[]`. – ifly6 Jul 26 '16 at 07:56

1 Answers1

0

If you absolutely need to use request.getParameter(), you will have to convert your arrays to strings using a delimiter character, e.g. convert this

String[] array = { "John", "Peter", "Paul" };

to this

String plainTextArray = "John#Peter#Paul";

Then you will be able to pass you array values as String (the only type that getParameter() understands).
You can then restore them like this

String[] restoredArray = request.getParameter("plainTextArray").split("#");

Maybe you want to have a look at setAttribute() and getAttribute() which let you store any objects (including arrays). You can start here Difference between getAttribute() and getParameter()

Community
  • 1
  • 1
walen
  • 7,103
  • 2
  • 37
  • 58